Wix: остановка службы Windows при удалении

Когда я удаляю свою службу, я получаю сообщение об ошибке, в котором говорится, что я должен остановить такую-то службу перед удалением. Это неудовлетворительно - программа удаления должна автоматически остановить его.

Я нашел сообщение в блоге или группе новостей об этом несколько месяцев назад и заставил его работать должным образом, но теперь это перестало работать для меня. А у меня нет ссылки на пост ... может еще кто знает где он? :) Наверное, я поменял какую-то тонкую вещь, и она перестала работать. Я считаю, что устранение неполадок с Wix чрезвычайно сложно.

Я использую следующее включение, чтобы получить свойство X_ WIN_ SERVICE_ NAME (извините, я не знаю, как избежать _ экранирования здесь) из реестра. Это не имеет значения при установке, потому что в этом случае я явно задаю его с помощью входного файла. Это включение используется перед любыми компонентами в моем файле wxs.

<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">

<?ifndef SetupXWinServiceRegistryProperties ?>
<?define SetupXWinServiceRegistryProperties ?>

<?define XWinServiceRegistryKey='Software\X\Y'?>

<Property Id="X_WIN_SERVICE_NAME">
  <RegistrySearch Id="XWinServiceNameSearch"
                    Root="HKLM"
                    Key="$(var.XWinServiceRegistryKey)"
                    Name="ServiceName"
                    Type="raw"/>
</Property>

<?endif?>
</Include>

Следующий компонент include используется для сохранения значения реестра при установке:

<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">

<?ifndef WriteXWinServiceRegistryProperties ?>
<?define WriteXWinServiceRegistryProperties ?>

<Component Id="CompWriteXWinServiceRegistryProps"
  Guid="some guid">

<!-- Write properties to the registry. Then they will be 
       accessable during uninstall. -->

<RegistryValue Root="HKLM"
   Key="$(var.XWinServiceRegistryKey)"
   Name="ServiceName"
   Type="string"
   Value="[X_WIN_SERVICE_NAME]"
   Action="write" />

</Component>

<?endif?>

</Include>

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

          <ServiceInstall Id="ServiceInstallXWinService"
                          Name="[X_WIN_SERVICE_NAME]"
                          Start="auto"
                          DisplayName="xxx"
                          Description="yyy"
                          Account="[X_WIN_SERVICE_USER]"
                          Password="[X_WIN_SERVICE_PASSWORD]"
                          Type="ownProcess"
                          ErrorControl="normal"
                          Vital="yes" />

          <ServiceControl Id="ServiceInstallXWinService" 
                          Name="[X_WIN_SERVICE_NAME]"
                          Stop="both"
                          Remove="uninstall"
                          Wait="yes" />

Любые идеи?


person evilfred    schedule 16.06.2009    source источник


Ответы (1)


Вы уверены, что для свойства X_WIN_SERVICE_NAME задано правильное значение при удалении. Используйте файл подробного журнала, чтобы убедиться, что поиск устанавливает значение правильно. Все выглядит нормально (хотя я не знаю, почему вы помещаете все в файлы Include, а не просто используете фрагменты).

person Rob Mensching    schedule 17.06.2009
comment
вы правы, это должно быть что-то тонкое, потому что после каких-то несвязанных изменений он снова работает: S - person evilfred; 04.07.2009