Wix Service Установить DLL

У меня есть настраиваемое действие в Wix для установки одного из сервисов для моего приложения.

<Custom Action='ManagedInstall' After="InstallFinalize"/>

    <CustomAction Id="ManagedInstall"
                  Directory='INSTALLDIR'
                  ExeCommand='"[WindowsFolder]\Microsoft.NET\Framework\v2.0.50727\installUtil.exe" /LogToConsole=false ControlService.dll'
                  Impersonate='yes'
                  Return='check'>
    </CustomAction>

Это прекрасно работает под Windows с XP и 7 (с повышенным UAC) на любом настольном компьютере, виртуальной машине или ноутбуке, кроме некоторых наших ноутбуков с шифрованием.

Предполагая, что это потому, что выполнение консоли installUtil.exe прерывается шифрованием (по какой-то причине это единственное различие между системами), я пытался обойти решение для замены вышеуказанного кода настраиваемого действия.

        <Component Id='ControlServiceDLL' Guid='27C58A4E-E1A9-4b85-B048-F8BBB1BF3C76'>
          <File Id='ControlService.dll'
              Name='ControlService.dll'
              DiskId='1'
              Source='Data\ControlService.dll'
              Vital='yes'
              KeyPath='yes'/>

          <ServiceInstall
              Id="ControlServiceInstall"
              Type="shareProcess"
              Vital='yes'
              Name='ControlService'
              DisplayName='Control Service'
              Description='Control Service Description'
              Start="demand"
              ErrorControl='ignore'
              Interactive="no">
          </ServiceInstall>

          <ServiceControl Id="StartService" Remove="uninstall" Name="Control Service" Wait="yes" />
        </Component>

И он не запускается изначально, поэтому мне пришлось удалить команду запуска / остановки Service Control, чтобы увидеть, устанавливает ли он. Да, он устанавливается нормально, но не может запустить службу даже вручную.

По наблюдению обнаружил следующее, что может помочь кому-то попытаться помочь мне в этом.

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

С помощью настраиваемого действия: путь к исполняемым файлам свойств службы, C:\windows\SysWOW64\dllhost.exe /Processid:{926E3CF4-B966-4E61-A46B-C3C49F579F7C}

Где, как при использовании Service Install, отображается "C:\Program Files (x86)\ Моя тестовая компания \Services\ControlService.dll"

2 ответа

Проблема, с которой вы / где сталкиваетесь, заключается в том, что вы пытаетесь разместить dll как сервис. Служба Windows является исполняемым файлом (exe).

Если вы используете wix 3.0 или выше, используйте нестандартный подход к действиям, как описано здесь, включая подводный камень, на который я попал: http://blog.tentaclesoftware.com/archive/2009/01/01/21.aspx

Вы можете включить манифест приложения с правами администратора, поэтому все события будут создаваться / вызываться под учетной записью администратора.

Если у вас есть MSI, то вы можете использовать инструмент http://dotnetinstaller.codeplex.com/, который преобразует MSI в EXE и присоединяет UAC к настройке. Следовательно, если у пользователя нет прав администратора, установщик запросит его.

Другие вопросы по тегам