PDA

Показать полную графическую версию : SFX Creator 4 Alpha - создаём SFX архивы


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [27] 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

Limonica
08-12-2012, 21:09
Не, что то типа этого:

IfFileExists "Например проверка доступа к файлу или параметру, пока непонятно как это будет работать" 0 ADMIN

.....
....
......
....
Quit

ADMIN:

.......
......
.
.......
Quit

Limonica
08-12-2012, 22:33
Слушайте люди добрые, а как бороться с перенаправлением в 64 битных системах, для переменной $PROGRAMFILES, $PROGRAMFILES32, $PROGRAMFILES64 всё понятно, а для $SYSDIR O_o
, ведь перенаправляет в SysWOW64 :(

Salmo
08-12-2012, 23:37
Возможно это защищенный системный процесс »
Да, этот процесс от защитного ПО, поэтому выгружается средствами самой программы вручную. От инсталлятора требуется только определить его наличие, выдать предложение о закрытии, дождаться ручного закрытия и продолжить работу. Все это проделывает без зависания, именно урезанный код, а полный виснет.
вы вырезали тот код, который отвечает за определение наличия процесса... »
В том-то и дело, что процесс определяется без этой части кода...


Полный код, который приводит к зависанию.

Function EnumProcessCall
StrCmp $R3 "$3" 0 nokill
${KillProcess} "$5" $R4
nokill:
FunctionEnd
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Function GetAccountType
UserInfo::GetAccountType
Pop $1
StrCmp $1 "Admin" okAccountType 0
MessageBox MB_OK|MB_ICONEXCLAMATION `Для установки программы "${PRODUCT_NAME}" необходимо войти в систему с правами Администратора!$\n$\nПрограмма установки завершает свою работу`
quit
okAccountType:
FunctionEnd

Function .onInit
Var /Global CommandLine
!insertmacro GetParametersCall $CommandLine
${GetTime} "" "L" $Day $Month $Year $WeekDay $Hour $Minute $Seconds
StrCpy $TMPDIR "$TEMP\sfxcreator_$Minute$Hour$Seconds"
StrCpy $R0 0
newSearch_1:
${FindProcessName} "AVJF.EXE" $R1 ;Вот же, поиск есть
StrCmp $R1 "1" 0 end_1
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "Для продолжения необходимо выгрузить $\nПожалуйста, закройте приложение самостоятельно.$\n$\nМожете отказаться от установки, нажав кнопку 'Отмена'" idOK +2
quit
${KillProcess} "AVJF.EXE" $R1 ;Эта строчка тоже не нужна
sleep 1000
goto newSearch_1
end_1:
CreateDirectory "$TMPDIR"
call PRE_Function
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Код между \\\\\\\\\\\\\ компилируется без ошибок и дает возможность установщику определить наличие процесса, ждет его ручное закрытие и отрабатывает, далее, без зависаний. Я, когда удалял верхнюю часть, подумал, что она относится только к Убиванию процесса(?), что мне не требовалось.

Может есть этому объяснение...
А может функция определения прав Админа "всунулась" не туда и должна быть над Function EnumProcessCall ? Или это не важно? (Проверил позже, - перемещение ничего не дает)

Проверил все еще раз. Скомпилировал все заново. Полный код виснет. Урезанный работает.

Salmo
09-12-2012, 00:04
ведь перенаправляет в SysWOW64 »

Задайте путь $%WinDir%\Sysnative вместо $SYSDIR. Требуется проверка. Вопрос по этому поводу задал ниже...

Я не разбирался в возможностях NSISа в этом отношении, но ясно, что для 32 битного процесса, коим является процесс инициируемый инсталлятором, необходимо перенаправление отключать, чтобы попасть в System32, что морочно. Я пока делаю так: Добавляю в пакет батник, который запускаю через %WinDir%\Sysnative\cmd в 64 битной среде с правами Админа, и он уже ковыряется в System32.

Если нужно что-то патчить, а патчи 32 битные, то надо, с помощью того-же батника, скопировать нужные файлы на нейтральную территорию (TEMP), став их владельцем и получив полный доступ, пропатчить и вернуть назад, восстановив владельца и права доступа. Если оригинальные файлы в System32 переписать не удается, чаще всего получается их переименовать и, после перезагрузки, удалить, если необходимо. Так, что CMD еще живо :)

truvo
09-12-2012, 20:05
K.A.V., мне не совсем понятно, если человек первый раз зашел в тему - какие из вложений ему скачать для получения свежайшего варианта?

Salmo
09-12-2012, 21:28
truvo, Извините, что отвечаю, хотя вопрос не ко мне... Если программа не установлена - Setup_rar. Если установлена, достаточно запустить автоматическое обновление и все "свежее" поселится у вас :)
Можете учесть это сообщение: http://forum.oszone.net/post-2041258-517.html

truvo
09-12-2012, 23:33
Salmo, зайдя впервые в тему, сложно понять, в чем смысл того сообщения.

Salmo
10-12-2012, 00:10
truvo, Да, согласен, трудновато... Смысл такой: Если у вас была установлена программа ранее, возможно, она содержит ошибку (отсутствует нужный файл). Поэтому, после автоматического обновления, нужно проверить его наличие по пути SYS\ofiles\SelfDel.exe. Успехов...

K.A.V., Здравствуйте. Еще вопрос, в связи с вопросом Limonica. Если я пропишу путь установки для файла, используя виртуальную папку Sysnative для 64 битной системы, как программа переварит такой вариант, получу ли я доступ в System32? У меня нет 64 битной винды, проверить не могу...

truvo
10-12-2012, 01:19
Salmo, но если я собрался, впервые зайде в тему, скачать по вашему совету Setup_rar - у меня же не установлена эта программа ранее, это же ясно! Зачем вы тогда отсылаете к тому сообщению? Или вы полагаете, что в сегодняшнем Setup_rar у автора осталась какая-то старая ошибка?

Salmo
10-12-2012, 02:04
truvo, Нет, в этом пакете ошибки нет. Мой ответ Вам начинался фразой:Если программа не установлена - Setup_rar. » - этим можно было ограничиться (и мне и Вам), но я больше сосредоточился на фразе:какие из вложений ему скачать для получения свежайшего варианта? »
То, что Вы впервые в этой теме, явно не подразумевает, что Вы не скачали ранее еще где-нибудь эту программу, поэтому, я упомянул второй вариант, учитывая, что еще кто-то интересуется вопросом обновления... Извините, что сделал Вас жертвой многословия... :)

K.A.V.
10-12-2012, 15:56
Все это проделывает без зависания, именно урезанный код, а полный виснет. »
Это впринципе невозможно, т.к. в вашем случае данная функция никогда не будет вызвана
Функция "EnumProcessCall" будет вызвана лишь в том случае, когда вы включаете убитие процесса по, например, "части имени окна"
В вашем же случае (поиск по имени процесса) данная функция никогда не будет вызвана...
И зависание происходит не от того, что в скрипте присутствует функция, а из-за чего-то другого, а причину вам придётся искать самостоятельно


${KillProcess} "AVJF.EXE" $R1 ;Эта строчка тоже не нужна »
"Не нужна" только в вашем случае! Вы помните оригинал сообщения, которое было написано выше данной команды??
Я сделал функцию универсальной, поместив в один запрос выбор пользоваелю...
Если процесс найден, то пользователю показывается сообщение и он сам решает, позволить ли пакету инсталлятора самому убить процесс, либо же пользователь сам закроет указанное приложение и только потом нажмёт кнопочку "ОК"
Так что данная строчка не лишняя ;)

А может функция определения прав Админа "всунулась" не туда и должна быть над Function EnumProcessCall ? »
Порядок функций в данной ситуации не имеет значения

Проверил все еще раз. Скомпилировал все заново. Полный код виснет. Урезанный работает. »
Я уже объяснил...Значит виснет у вас на другом месте, но никак не из-за функции, которая никогда не выполняется в вашем пакете инсталлятора

---
K.A.V., мне не совсем понятно, если человек первый раз зашел в тему »
Встроенная функция обновлениея в SFX Creator создана для таких как вы :)
Update_2.6.1.zip для тех, у кого установлена программа Сентябрьской версии 2.6
Update_8.12.2012.zip для тех, у кого установлена версия 2.6.1


K.A.V., Здравствуйте. Еще вопрос, в связи с вопросом Limonica. Если я пропишу путь установки для файла, используя виртуальную папку Sysnative для 64 битной системы, как программа переварит такой вариант, получу ли я доступ в System32? У меня нет 64 битной винды, проверить не могу... »
Сам без понятия...Нет возможности установить более совершенную систему отличную от WinXP, про 64-bit ОС вообще молчу... :)

Salmo
10-12-2012, 17:44
"Не нужна" только в вашем случае! »
Да я и имел в виду, что только в моем случае, понял, что части кода не лишние, а делают код универсальным, позволяющим пользователю делать выбор. Видимо зависание связано именно с выгружаемой программой и, именно, с этой. Понимаю, что это частный случай. Но так как пакет будет работать именно с этой программой, то мне придется учитывать эту особенность. Спасибо, что уделяете мне время...

K.A.V.
10-12-2012, 17:52
Но так как пакет будет работать именно с этой программой, то мне придется учитывать эту особенность »
Ну тогда чуть измените код, и, пропишите просто сообщение, как вы и сделали, но только чуток измените команду после нажатия ОК, у вас сейчас при нажатии ОК идёт попытка убития процесса, можете сделать, чтобы был просто повторный поиск...вот так:

MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "Для продолжения необходимо выгрузить $\nПожалуйста, закройте приложение самостоятельно.$\n$\nМожете отказаться от установки, нажав кнопку 'Отмена'" idOK -2

Ничего из кода не удаляйте, а просто замените символ + на - :)

P.S.
А если по хорошему и у вас проект будет постоянно компилироваться новыми версиями, и, чтобы при каждой компиляции не заморачиваться редактированием исходников, можете создать "Выполнить собственные функции" и просто подключаемая заранее написанная вами функция будет подключаться к проекту :)

Salmo
10-12-2012, 19:39
можете сделать, чтобы был просто повторный поиск...вот так: »
Спасибо учту...
чтобы при каждой компиляции не заморачиваться редактированием исходников »
Да я и не заморачиваюсь особо. В папке NSIS у меня хранятся все модернизированные исходники к моим проектам и я их просто копирую вместо созданного и просматриваю. Так нагляднее, хотя, когда будут отработаны окончательные варианты, может быть, сделаю так, как вы советуете... Спасибо.
У меня на основе SFX Creatorа уже сделаны несколько псевдо-портативных утилит, т.е. я не применяю пакеты только по прямому назначению, как инсталляционные пакеты, что имеет свои особенности. Например, ранее я вам писал, что плагин ExecDos.dll не любит запускать батники в скрытом виде, без ожидания конца работы батника (помните я просил добавить паузу после команды - это тоже не решало проблему для сложных батников, которые имеют разветвленные функции, - они зависали). Я стал использовать для запуска батников исключительно ExecCmd.dll, который этой проблемы не создавал. Писать об этом Вам не стал, потому, что ожидал ответ: "плагин только запускает батник и никак не влияет на его дальнейшую работу..." Но практика показала, что без ожидания конца работы батника он с запуском не справляется. Есть еще один нюанс... для случая, когда пакет помещен в автозагрузку. В этом случае, с запуском батника не всегда справлялся и плагин ExecCmd.dll (пакет распаковывался, но пуск не происходил). Т.е в этой экстремальной ситуации, когда грузится система и процессор нагружен, плагин не успевает корректно подгрузиться и выполнить свою функцию. Понятно, что до сути причин в этих случаях докопаться почти невозможно, поэтому я ищу другие варианты. Например, в случае с автозагрузкой (помня, что скрипты VBS меня никогда не подводили) я решил добавить в код свою функцию по созданию файла скрипта VBS для скрытного запуска батника без ожидания конца работы, что исключило сбои при запуске. Но такой вариант не очень изящный, потому, что подменяет штатные функции SFX Creatorа и, как я уже писал, запуск дополнительных исполняемых файлов перехватывают ХИПСЫ, если они есть в системе... Так, что имеется много частных случаев применения пакетов, которые имеют свои особенности и Вам, как разработчику программы, конечно, их учитывать было бы нереально... и не нужно :) Программа же Ваша, обладая значительной гибкостью, дает большие возможности решать эти не стандартные ситуации. Спасибо...

K.A.V.
10-12-2012, 20:05
В папке NSIS у меня хранятся все модернизированные исходники к моим проектам и я их просто копирую вместо созданного и просматриваю »
Ну, как я уже увидел из всех ваших сообщений, вы пользуетесь SFX Creator'ом постоянно, поэтому...впринципе могу добавить чисто для вас такую возможность, при которой SFX Creator не будет создавать из файла проекта исходный код, а будет копировать готовый *.nsh файл и обрабатывать именно его при запуске процесса компиляции, но надо ли это вам? :)
К примеру, добавить в файла проекта *.INI строку с указанием *.nsh файла, который стоит обрабатывать при компилировании, а не создавать новый

Писать об этом Вам не стал, потому, что ожидал ответ: "плагин только запускает батник и никак не влияет на его дальнейшую работу..." »
Ну а это вы зря...Откуда вы знаете, каков бы был мой ответ?
Я ведь, знаете ли, вообще SFX Creator'ом не пользуюсь...
Идея создания SFX Creator вообще появилась у меня после прочтения статьи Создание SFX архива (http://www.oszone.net/3171), посмотрев на которую я подумал, что возможно, у меня получится сделать для пользователей автоустановки что-то более простое, понятнее и более функциональное, чем WinRAR SFX и 7z SFX
Конечно же, знал о таком детище как Модифицированный SFX модуль 7-Zip'а для установок (http://forum.oszone.net/thread-51547.html), но лично для меня он кажется сложноватым...слишком много ненужных символов в командах и начинающему сложно (как мне кажется) разобраться во всех тонкостях...

Я пишу SFX Creator для народа, и, каким будет SFX Creator зависит исключительно от пользователей программы...
Да, я не программист с образованием и не смогу реализовать все ваши пожелания относительно того-же неудобного графического интерфейса программы, как тут кто-то высказывался...Но постараюсь сделать всё, что в моих силах и в рамках моих знаний :)

Так сказать, делаю как умею... :)

Salmo
10-12-2012, 22:04
Ну, как я уже увидел из всех ваших сообщений, вы пользуетесь SFX Creator'ом постоянно »
Да, с некоторого времени, переделал некоторые свои творения с использованием SFX Creator'а. Причина - маленький модуль, почти в 3 раза меньше того, который создавала программа, которой я пользовался, но главная причина в том, что она не обеспечивала запуск пакетов на Вин8 ( автор не верно подошел к решению интерфейса, включив на постоянной основе, функцию выбора типов ОС, ограниченную его списком, в котором нет Вин8), а я хочу сделать утилиту совместимую с восьмеркой... Правда, справедливости ради, скажу, что проблем с требуемыми мной функциями, у пакета не было ни в каких экстремальных ситуациях.
впринципе могу добавить чисто для вас такую возможность, при которой SFX Creator не будет создавать из файла проекта исходный код, а будет копировать готовый *.nsh »
Спасибо, не надо меня так баловать :) ( ну только, если не сложно), лучше решать обще-потребительские задачи, раз Вы настроены расширять функционал программы. (напомню просьбу добавить в кеширование "все типы" файлов)
Ну а это вы зря...Откуда вы знаете, каков бы был мой ответ? »
Извиняюсь, :) но такой ответ уже звучал то ли здесь, то ли в ветке по NSIS (автора не помню), найти уже не реально, но в память мне врезался хорошо, потому, что именно в этот момент возникли проблемы с запуском батника через ExecDos.dll и я промолчал...
Идея создания SFX Creator вообще появилась у меня после прочтения статьи Создание SFX архива, посмотрев на которую я подумал, что возможно, у меня получится сделать для пользователей автоустановки что-то более простое, понятнее и более функциональное »
Меня эта статья, в свое время, отпугнула. Я не хотел тратить мозги на осваивание вспомогательных инструментов, лучше уделять внимание собственному проекту, поэтому, меня привлекла именно Ваша программа и подход к реализации функций. Зачем мучиться с китайскими палочками, осваивая их, когда есть удобная ложка :)
Я пишу SFX Creator для народа, и, каким будет SFX Creator, зависит исключительно от пользователей программы... »
Готовы терпеть все капризы пользователей? Ну, тогда Вам терпения и мужества...
не смогу реализовать все ваши пожелания относительно того-же неудобного графического интерфейса программы »
Этот диалог я помню, именно тогда я появился на форуме. Надо понимать, что функциональность важнее красивостей. Автор не оценив гибкость программы по достоинству и ее функционал, сосредоточился на второстепенном...

К.А.V, скажите, нужно ли напоминать о пожеланиях, которые вы одобрили и решили реализовать, но их пока нет какое-то время?
И еще, моя активность в теме и словоохотливость выглядят нескромно?

K.A.V.
11-12-2012, 05:30
Спасибо, не надо меня так баловать ( ну только, если не сложно) »
Да не сложно...Там прописать то впринципе пару строк, чтобы просто код не создавался, а сразу компилировался с подменой исходника :)

Зачем мучиться с китайскими палочками, осваивая их, когда есть удобная ложка »
Вот я и захотел создать именно такую "ложку" :yes:

Готовы терпеть все капризы пользователей? »
Я готов реализовать тот функционал, который реально необходим SFX Creator'у, а не просто пихать в код всё, что пользователи захотят...У каждого свои потребности и подстраиваться под желания каждого пользователя это будет не правильно, поэтому рассматриваем реальные проблемы и добавляем тот функционал, который может пригодиться всем при создании SFX

К.А.V, скажите, нужно ли напоминать о пожеланиях, которые вы одобрили и решили реализовать, но их пока нет какое-то время? »
Вообще, все увиденные пожелания в данной теме я сохраняю в txt файл, в котором у меня заметки на следующую версию/исправления, лежит у меня он в папочке с исходниками SFX Creator, но вот после поломки компа, про
напомню просьбу добавить в кеширование "все типы" файлов »
запамятовал, потому что не было возможности сохранить :)
Сегодня к вечеру, думаю, будет обновление ;)

Если есть что-то ещё, оглашайте, возможно что-то и упустил :)

И еще, моя активность в теме и словоохотливость выглядят нескромно? »
Да всё хорошо, активный участник, который заинтересован в развитии проекта и помогает другим пользователям программы решать возникшие проблемы при работе с программой, за это вам несомненно +

Salmo
11-12-2012, 18:23
K.A.V., Здравствуйте. Сегодня пытался работать в программе на 7ке на 10 дюймовом экране... Работой это не назовешь, потому, что окно программы обрезано снизу по линии "дополнительные возможности", что не дало возможности довести дело до результата - готового пакета. В общем, какие у пользователя семерки возникнут трудности?

1. Если Пользователь работает исключительно под учеткой простого пользователя, он не сможет работать в программе, установленной в папку Programm Files, если отключен UAC. Программы, работающие с правами простого пользователя, не имеет допуска на создание файлов в папке программ, а SFX Creator сохраняет файлы настроек, проектов и исходники именно в своей папке по-умолчанию. Включенный UAC запросом дает возможность поднять права программы до административных привилегий (надо Пользователю знать пароль Админа), но работать не комфортно (у меня, например, не работало перетаскивание в окно).
Выход: 1. Устанавливать SFX Creator в Общие папки/Документы Пользователей, тогда программа работает под простым Пользователем и беспрепятственно обновляется.
2. Работать в ней под учеткой Администратора (UAC может быть в любом состоянии отк\вкл), тогда место установки SFX Creator'а не критично, но предпочтительно все-таки в папках, которые не затрагиваются системой восстановления, потому, что, пользователь, по забывчивости, не сделав бэкап своих проектов, которые он недавно создавал, потеряет их, запустив восстановление (потом придется делать откат, если поймет, что произошло, - морока). Второй вариант, я думаю, предпочтительней, - кто знает, какие еще функции SFX Creator'а требуют повышенных прав...

Хотелки:
1. Мне часто приходится, пред установкой многофункционального пакета, создавать точку восстановления системы. В этом случае, я всегда включаю в пакет окно предложения сделать это или отказаться. Можно ли эту функцию реализовать SFX Creator'ом и будет ли она востребована?

K.A.V.
11-12-2012, 18:57
Сегодня пытался работать в программе на 7ке на 10 дюймовом экране... Работой это не назовешь, потому, что окно программы обрезано снизу по линии "дополнительные возможности", что не дало возможности довести дело до результата - готового пакета. »
Знаю о проблеме с нестандартными разрешениями и с увеличенным dpi в частности, пока проблему устранить не могу... :(


он не сможет работать в программе, установленной в папку Programm Files »
В SFX Creator нет жесткой привязки к устанавливаемому каталогу, так что пользователь может его изменить...
Но с другой стороны, было бы не плохо уведомить об этом пользователя...Сделаем проверку ОС в пакете инсталлятора и будем предупреждать пользователя об этом, такой вариант думаю подойдёт? :)

Мне часто приходится, пред установкой многофункционального пакета, создавать точку восстановления системы. В этом случае, я всегда включаю в пакет окно предложения сделать это или отказаться. Можно ли эту функцию реализовать SFX Creator'ом и будет ли она востребована? »
Впринципе, можно сделать обычное окно сообщения с запросом...Как таковой SFX Creator не является программой для создания пакетов инсталляторов (хотя умеет ;) ), поэтому делать именно графическое сообщение с диалогом будет не правильным
Посмотрю завтра, что можно сделать, вроде бы для NSIS я как-то тестировал плагин для создания точек восстановления...
Можем просто в "Дополнительную возможность" добавить новый пунктик :)
Завтра завтра всё скажу, сегодня уже неохото капаться :blush2:

---
Вышло обновление
1. В "Управление проектами" в поле "Типы файлов для кеширования" укажите маску *.* для кеширования всех типов файлов в проекте
2. Salmo, ;)

1. Создайте каталог MySources в каталоге SFX Creator
2. В INI файл проекта пропишите новую секцию:

[ccode]
Source=MyTEST

3. Скопируйте файл MyTEST.nsi в папку MySources
При наличии указанного вами файла в параметре "Source" SFX Creator не будет создавать каждый раз при компиляции новый исходный код из данных проекта, а будет копировать указанный вами файл в каталог "NSIS", подменяя Source.nsi

Limonica
11-12-2012, 18:59
KAV, samoudalenie ispol'zuya dll nerabotaet!




© OSzone.net 2001-2012