MSI: запустить сервис, если пользователь не решит перезагрузить - PullRequest
0 голосов
/ 05 августа 2010

Я работаю над установщиком MSI, который устанавливает и запускает службу. Это может или не может заменить файлы в использовании. Когда это произойдет, появится приглашение перезагрузить компьютер в конце установки.

Служба запускает длительную инициализацию при первом запуске, , которую нежелательно прерывать выключением . Я пытаюсь предотвратить запуск службы до тех пор, пока не станет известно, что установка завершена, и перезагрузка не произойдет, например, перезагрузка не требуется или пользователь не выбрал отложить перезагрузку.

Bootstrapper не является опцией, все должно быть реализовано внутри MSI

Может кто-нибудь посоветовать мне, как лучше это сделать?

1 Ответ

0 голосов
/ 05 августа 2010

Я собираюсь дать прагматичный, хотя и не идеальный ответ .... Установщик Windows на самом деле не имеет никакого способа поддержать это, так что просто намеренно запрашивайте перезагрузку и не используйте элемент ServiceControl.Просто установите ServiceInstall на Auto и позвольте перезагрузке позаботиться обо всем остальном.

Я знаю, я обычно стараюсь также избегать перезагрузок, но если вам часто все равно понадобится такая перезагрузка, это просто упростит всю вашу историю..

Единственное, о чем я действительно могу подумать, это представить механизм RPC в вашем сервисе (например, конечную точку wcf) и сделать так, чтобы ваш длительный процесс выполнялся только при втором запуске сервиса иликогда этот RPC вызывается в первый раз.Затем сделайте пользовательское действие в конце программы установки, если вызов перезагрузки не требуется.

Я просто не могу придумать, как это сделать в MSI.

...