2015-04-09 2 views
3

Я установил установщик с помощью Inno Setup, и мне нужно перезагрузить компьютер после запуска некоторых файлов, , поэтому я использовал решение от this post.Inno Setup: перезагрузка во время установки не запускается после перезагрузки

Inno Setup образец «CodePrepareToInstall.iss» работает отлично, так что я использовал код для моей тестовой установки, но мой инсталлятор не запускается после перезагрузки компьютера.

Обе установки (Inno демо и мой тест) добавить запись реестра в 'HKLM \ Software \ Microsoft \ Windows \ CurrentVersion \ RunOnce', единственное отличие состоит в добавленная стоимость. Мое жало больше, чем добавленная строка из демонстрации inno.

Есть ли ограничение по нотам в реестре/runonce?

Inno Demo Value: 
"C:\Users\Admin\Documents\Inno Setup Examples Output\setup.exe" /restart=1 /LANG=default /DIR="C:\Program Files (x86)\My Program" /GROUP="My Program" 

My Installer Value: 
"C:\Users\Admin\Documents\Inno Setup Projekte\Treiber Test\bin\Driver Test Setup.exe" /restart=1 /LANG=german /DIR="C:\Driver" /GROUP="Driver Test Setup" /TYPE="full" /COMPONENTS="1234driverinstaller,audio,bluetooth,chipset,devicepowermanager,gps,inputmanagementservice,modem,lan,1234powerplan,touchscreen,vga,wlan,wwan,1234products" 
+0

ли командную работу, если вы запустите его вручную? –

+0

Да, если я скопирую значение из реестра и запустив его в запуске, установщик подходит и отлично работает. Если я отключу значение после раздела «/ Группа», он также будет работать нормально после перезагрузки компьютера. – CrazyMetal

ответ

4

Понял. Windows имеет ограничение на 256 символов для команд, запущенных из реестра RunOnce в HKLU или HKLM.

Итак, я решил создать пакетный файл, который запускает мой установщик и впоследствии удаляет его. Поэтому мне просто пришлось пройти путь к пакету в реестр RunOnce.

InnoScript:

procedure CreateRunOnceEntry; 
var 
    RunOnceData: String; 
begin 
    RunOnceData := 'echo off' + #13#10; 
    RunOnceData := RunOnceData + 'start "" '; 
    RunOnceData := RunOnceData + Quote(ExpandConstant('{srcexe}')) + ' /restart=1'; 
    RunOnceData := AddParam(RunOnceData, 'LANG', ExpandConstant('{language}')); 
    RunOnceData := AddParam(RunOnceData, 'DIR', Quote(WizardDirValue)); 
    RunOnceData := AddParam(RunOnceData, 'GROUP', Quote(WizardGroupValue)); 
    if WizardNoIcons then 
     RunOnceData := AddSimpleParam(RunOnceData, 'NOICONS'); 
    RunOnceData := AddParam(RunOnceData, 'TYPE', Quote(WizardSetupType(False))); 
    RunOnceData := AddParam(RunOnceData, 'COMPONENTS', Quote(WizardSelectedComponents(False))); 
    RunOnceData := AddParam(RunOnceData, 'TASKS', Quote(WizardSelectedTasks(False))); 
    RunOnceData := RunOnceData + #13#10 + 'start /b cmd.exe /c del %0' + #13#10 + 'exit'; 

    SaveStringToFile(ExpandConstant('{commonappdata}\StartInstallation.cmd'), RunOnceData, True); 

    if not IsWin64 then 
     RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName, ExpandConstant('{commonappdata}\StartInstallation.cmd')); 
    if IsWin64 then 
     RegWriteStringValue(HKLM, 'Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName, ExpandConstant('{commonappdata}\StartInstallation.cmd')); 
end; 

Пакетный файл:

echo off 
start "" "C:\Users\Admin\Documents\Inno Setup Projekte\Treiber Test\bin\Driver Test Setup.exe" /restart=1 /LANG=german /DIR="C:\Driver" /GROUP="Driver Test Setup" /TYPE="full" /COMPONENTS="1234driverinstaller,audio,bluetooth,chipset,devicepowermanager,gps,inputmanagementservice,modem,lan,1234powerplan,touchscreen,vga,wlan,wwan,1234products" 
start /b cmd.exe /c del %0 
exit 
+1

Мы должны сообщать об этом как об ошибке, потому что это может произойти довольно легко. В качестве обходного пути для внедрения Inno Setup я бы предложил использовать планировщик задач. Постскриптум никогда не обращайтесь к «Wow6432Node». Используйте корневые ключи 'HKLM32' или' HKLM64', если вы хотите получить доступ к определенному виду реестра. – TLama

+0

Да, вы правы, я сообщу об этом как об ошибке и использую HKLM32 или HKLM64. Спасибо =) – CrazyMetal

+0

Спасибо за это! :) – TLama