我在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>
这在使用XP和7的Windows下运行正常(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启动/停止命令以查看它是否已安装。是的它安装得很好但是无法手动启动服务。
通过观察发现以下内容可能有助于某人试图帮助我。
使用我在下面找到的两种不同方法比较服务属性 希望它可以帮助那些能够回答我问题的人。
使用自定义操作:Service Properties Executable Path显示, C:\ windows \ SysWOW64 \ dllhost.exe / Processid:{926E3CF4-B966-4E61-A46B-C3C49F579F7C}
通过使用Service Install显示, “C:\ Program Files(x86)\ My Test Company \ Services \ ControlService.dll”
答案 0 :(得分:1)
您遇到的问题/面临的问题是您尝试将dll作为服务托管。 Windows服务是可执行文件(exe)。
如果您使用的是wix 3.0或更高版本,请使用非自定义操作方法,如此处所述,包括我遇到的关键路径陷阱: http://blog.tentaclesoftware.com/archive/2009/01/01/21.aspx
答案 1 :(得分:-2)
您可以包含具有管理权限的应用程序清单,因此将在管理员帐户下创建/调用所有事件。
如果您有msi,那么您可以使用dotnetinstaller工具,它将msi转换为exe并将UAC连接到安装程序。因此,如果用户没有管理员权限,安装程序将提示它。