Цитата МИШАНЧИК:
всё работает и копируется. Правда не знаю насколько это правильно. »
|
Как обещал возвращаюсь к Вашей проблеме.
Код:

SetEnvironment="PFx86=%ProgramFiles%\\Программа"
SetEnvironment="PFx64=%ProgramW6432%\\Программа"
RunProgram="setup.exe"
RunProgram="x64:hidcon:xCopy * \"%PFx64%\\\" /s /e /i /y"
RunProgram="x86:hidcon:xCopy * \"%PFx86%\\\" /s /e /i /y"
GUIMode="2"
То что у Вас не срабатывает Copy, но срабатывает xCopy наводит на мысль, что во время запуска этой команды папки назначения еще нет.
Объяснением этому может быть наличие дочерних процессов в Вашем
setup.exe.
Модуль выполняет все строки последовательно. После запуска строки
RunProgram="setup.exe" модуль ждет завершения процесса
setup.exe и только после этого переходит к выполнению следующей строки. Но если процесс
setup.exe порождает дочерний процесс (который продолжает производить некоторые операции, очевидно, и создание папки программы), а сам закрывается, то выполнение следующей строки конфига фактически начнется раньше завершения дочерних процессов (создания папки программы).
Для лучшего понимания я предлагаю Вам сделать SFX из следующего конфига (модуль должен быть 1.5 beta (сборка 2478) и выше):
Код:

;!@Install@!UTF-8!
BeginPrompt=" Проверка работы префикса 'waitall'
• Нажмите 'OK', будет произведен запуск Блокнота без 'waitall'
• Нажмите 'OK', удерживая [Shift], будет произведен запуск
Блокнота с использованием префикса 'waitall'"
RunProgram="hidcon:cmd /c Echo Start \"\" notepad.exe >test.bat"
RunProgram="hidcon:test.bat"
AutoInstall="hidcon:cmd /c Echo Start \"\" notepad.exe >test.bat"
AutoInstall="hidcon:waitall:test.bat"
GUIMode="2"
FinishMessage="Модуль завершил работу"
;!@InstallEnd@!
Здесь используется два варианта запуска батника который в свою очередь запускает Блокнот.
При варианте запуска 'OK', Вы увидите открытие Блокнот и сразу же появится диалог FinishMessage. Почему же FinishMessage появился раньше чем Вы закрыли Блокнот? Потому что основной процесс
test.bat запустил дочерний процесс (Блокнот) и после этого
test.bat закончил работу. Нечто подобное происходит и в Вашем случае.
Теперь запустите вариант 'OK', удерживая Shift. Диалог
FinishMessage появится только после того, как Вы закроете Блокнот, т.е., завершится дочерний процесс. Этому способствует префикс
waitall (описание в справке), который я использовал во втором варианте.
Резюме: попробуйте запустить Ваш
setup.exe с префиксом
waitall. В любом случае это будет правильнее, т.к., копирование будет производится после полного завершения работы файла
setup.exe.