У меня есть установщик, который предлагает пользователям перезагрузить компьютер после установки.Я бы предпочел, чтобы пользователь не перезагружал свой компьютер в этом случае, и чтобы explorer.exe просто перезапускал себя, используя API RestartManager, предоставляемый с Windows Vista и выше.
Я создал отдельный исполняемый файл, который копируется влокальный компьютер во время установки и запускается после этого.Отдельный исполняемый файл регистрирует файл explorer.exe, закрывает его и перезапускает на основе этого кода: http://msdn.microsoft.com/en-us/library/aa373681%28v=VS.85%29.aspx. Когда исполняемый файл запускается отдельно от программы установки, он работает как задумано.Но когда он запускается как пользовательское действие как часть пакета MSI, созданного с помощью InstalShield, он закрывает файл explorer.exe, но не перезапускает его.
Я всегда получаю код ошибки 160 для RmRestart, когда он запускается с установщиком.Документы говорят, что это код ошибки, означающий, что были предоставлены неверные аргументы.(http://msdn.microsoft.com/en-us/library/aa373665%28v=vs.85%29.aspx). Я вполне уверен, что мои аргументы не являются недействительными, поскольку они работают, когда исполняемый файл запускается отдельно от установщика Windows.
Я застрял на этом этапе и не уверен, что еще нужно сделать, чтобы получить этоЕдинственное, в чем я не уверен, это то, что «0» может быть правильным дескриптором сеанса, возвращенным из RmStartSession () с кодом ошибки 0 («Успех»). Предполагая, что это не так, я настроил свой исполняемый файл так, чтобы он также принималRmSessionKey, созданный установщиком Windows до InstallValidate, и я использую его для вызова моего исполняемого файла как отложенного действия. В этом случае я получаю ошибку 4c3 для RmShutdown, которая представляется неверным кодом ошибки.
Скалы: есть отдельный .exe, который использует RestartManager API для выключения, перезапустите explorer.exe, который работает, когда не запускается с помощью установщика Windows, но при объединении он ломается. Видя код ошибки 160 для RmRestart ().попытайтесь заставить это работать. Я могу предоставить фрагменты кода, если люди хотят ...
Спасибо за любыепожелания / комментарии.