2015-07-02 4 views
2

В моей WiX я использую следующее заявление:Как я могу остановить .exe при восстановлении, обновлении и удалении в wix?

<ComponentGroup Id="BinComponents" Directory="BIN"> 
    <Component Id="BinComponent" Guid="23D229D0-06EE-49f4-80B4-6D7136500721"> 

    <File Id="MyProjectOutput" Name="MyProject.exe" Source="MyProject\bin\MyProject.exe"/> 
    <ServiceControl Id="RemoveService" 
     Stop="both" 
     Remove="both" 
     Name="MyProject.exe" 
     Wait="yes" /> <!-- Stop running MyProject instances --> 

    </Component> 
</ComponentGroup> 

Мои Repro:

На первом, я бегу мои установки, как обычно. После установки я запускаю свое веб-приложение. .exe появляется в диспетчере задач, как обычно:

enter image description here

Я хочу закончить этот exe-файл на ремонт, обновление или удаления. Поэтому я начинаю .msi снова и выбрать ремонт:

enter image description here

Теперь моя проблема: После нажатия кнопки «Восстановить», я ожидаю, что следующий диалог из-за объявленного ServiceControl:

enter image description here

Но это не так. Вместо этого появляется следующее диалоговое окно:

enter image description here

При входе в установку, журнал содержит в себе следующие строки:

MSI (s) (A8:DC) [10:16:28:227]: Executing op: ActionStart(Name=StopServices,Description=Stopping services,Template=Service: [1]) 
Action 10:16:28: StopServices. Stopping services 
MSI (s) (A8:DC) [10:16:28:228]: Executing op: ProgressTotal(Total=1,Type=1,ByteEquivalent=1300000) 
MSI (s) (A8:DC) [10:16:28:228]: Executing op: ServiceControl(,Name=MyProject.exe,Action=2,Wait=1,) 
MSI (s) (A8:DC) [10:16:28:228]: Executing op: ActionStart(Name=DeleteServices,Description=Deleting services,Template=Service: [1]) 
Action 10:16:28: DeleteServices. Deleting services 
MSI (s) (A8:DC) [10:16:28:228]: Executing op: ProgressTotal(Total=1,Type=1,ByteEquivalent=1300000) 
MSI (s) (A8:DC) [10:16:28:229]: Executing op: ServiceControl(,Name=MyProject.exe,Action=8,Wait=1,) 
MSI (s) (A8:DC) [10:16:28:229]: Executing op: ActionStart(Name=InstallFiles,Description=Copying new files,Template=File: 
[1], Directory: [9], Size: [6]) 

[...] 

MSI (s) (7C:28) [09:06:21:950]: RESTART MANAGER: Did detect that a critical application holds file[s] in use, so a reboot will be necessary. 
MSI (s) (7C:28) [09:06:21:950]: Note: 1: 1610 
MSI (s) (7C:28) [09:06:21:950]: Note: 1: 2205 2: 3: Error 
MSI (s) (7C:28) [09:06:21:950]: Note: 1: 2228 2: 3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1610 

Рядом с ремонта я также попробовал Update с такие же результаты. Возможно, какая-либо декларация отсутствует? Примечание. Когда я закрываю MyApp.exe в диспетчере задач, сообщение не появляется, поэтому MyApp.exe определенно несет ответственность за проблему.

ответ

1

Вы должны опубликовать весь журнал где-нибудь. Основная причина заключается в том, что при ремонте обычно не требуется заменять файлы. Поэтому, если вы буквально установили свой продукт, запустили exe, а затем ремонт должен заменить файлы, тогда проблема заключается не в том, что файл в использовании - это значит, что установленный продукт сломан, поэтому требуемые файлы или записи реестра были удален. Журнал событий приложения должен иметь записи MsiInstaller, описывающие отсутствующий компонент. Поэтому сначала посмотрите на эту первопричину.

После того, как исправление должно быть очень редким для ремонта, необходимо заменить файлы, поэтому не стоит беспокоиться. Но вы можете посмотреть на интеграцию своего приложения с Restart Manager или с помощью WiX-приложения CloseApplication.

+0

Я проверил журнал. Нет записи о недостающем компоненте. Установленный гордость, кажется, не сломан. – Simon

+0

С обновлением я получаю те же результаты. – Simon

+0

Что касается вашего ответа «После того, как исправление того, что ремонт должен быть очень редок для замены файлов, поэтому, возможно, не стоит беспокоиться»: Как уже упоминалось, отсутствует недостающий компонент, и я должен беспокоиться. Администраторы, которые устанавливают программное обеспечение на своем Windows Server, не могут перезапустить свою машину. Они видят сообщение «... reboot required ...» и отменяют настройку и не покупают продукт. – Simon

0

Диалоговое окно предупреждения, которое вы видите, относится к стандартным действиям «InstallValidate». Я столкнулся с подобной проблемой в прошлом. Я исправил его, используя один элемент управления службой вместо нескольких элементов управления службой, для того же служебного идентификатора. В моем случае у меня было несколько элементов управления сервисом для одного и того же идентификатора службы.

Это согласно ссылке на http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Upgrade-uninstall-restart-issue-td7586315.html

это сделал трюк для меня. Многочисленные пользователи сообщают о том же поведении, хотя официально не документированы. Наличие одного элемента управления службой заставляет Restart Manager принять к сведению запись в таблице управления службами и не позволит диспетчеру Restart Manager указать службу в диалоговом окне RMFilesInUse или запретит Restart Manager отбрасывать предупреждающие сообщения, информирующие пользователя о том, что может потребоваться перезагрузка. Вот еще одна ссылка Can't start windows service with WiX

Мои эксперименты показали мне, что есть definitley связь между числом элементов управления услугами и Restart Manager, http://microsoft.public.windows.msi.narkive.com/OOuQQAsw/controlling-restart-manager-behaviour

Другой вариант должен был полностью отключить Restart Manager с помощью свойство RESTARTMANAGERCONTROL. Если вы отключите RestartManager, вам могут быть предложены перезагрузки (возможно, вы захотите его протестировать один раз), и устаревший механизм «Файлы в использовании» стартует. Отключение Restart Manager является сознательным решением соответствующего разработчика MSI и порой становится необходимым.

Я не уверен, как выглядит таблица управления сервисом. Просто хотел поделиться своим опытом с вами.

Надеюсь, это поможет.

С уважением, Киран Хедж

+0

Хедж: Спасибо за ваш ответ. Я уже использую только один элемент ServiceControl, как вы можете видеть в моем сообщении. – Simon

+0

Ну, если это так, я бы попросил вас опубликовать подробный журнал установки Windows. Это единственный способ двигаться дальше. –

 Смежные вопросы

  • Нет связанных вопросов^_^