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 к настройке. Следовательно, если у пользователя нет прав администратора, установщик запросит его.