我一直在尝试使用WIX(3.10.1.2213)创建安装程序。
我正在安装使用DCOM的Windows服务。
我有一个使用 ServiceInstall 和 ServiceControl 的组件来完成我需要的工作。
但是,对于 AppId 条目,我遇到了问题。 如果我使用以下内容......
<AppId Id="{REALGUID}" Advertise="no" Description="MyDescription" LocalService="MyService" ServiceParameters="-Service" />
...尝试启动服务时我的安装失败 - 使用了非常有用的 “...无法启动。请确认您具有足够的权限来启动系统服务”。
但是,如果我手动添加注册表项 - 在WIX之外(即使通过导出WIX创建的条目 - 所以它们肯定是相同的) - 安装成功。
有谁知道这里会发生什么? 总之,WIX创建了我期望的条目,但安装失败。 如果我导出这些条目并从头开始,将条目合并到注册表中并重新运行安装程序,它就会成功。
我试图将AppId条目移动到wxs文件中的其他位置。我还尝试使用<RegistryValue...>
手动设置注册表项,但它似乎有相同的结果(我看到条目已创建,但服务无法启动)。
我不确定这是否相关,但此服务需要HKCR\AppID\{GUID}
下的其他条目,我使用<RegistryValue...>
创建。我不确定这是否会以某种方式导致冲突,我目前无法调试服务,因为它还远远不够。
此外,从here,我看到......
如果此元素嵌套在Fragment,Module或Product下 元素,必须做广告。
但我不完全理解它。这是否意味着'直接'嵌套在...下? 或者这可能是我的问题,我的wxs文件可能被严重排序,因为我需要注册表项而不是广告?
目前是这样的......
<Fragment>
<Directory...>
<Component...>
<File...>
<AppId...>
<RegistryValue...>
<ServiceInstall...>
<ServiceControl...>
我很困惑 - 但希望遗漏一些明显的东西。 希望有人可以为我阐明它。
此致 广告
如果有帮助,这里是相关组件的编辑摘录......
<Component Id="ServiceControl" Guid='REALGUID' >
<File Id="MyApplication.exe" Name="MyApplication.exe" KeyPath="yes" Vital="yes" Source="$(var.MyApplication.TargetDir)\MyApplication.exe" />
<AppId Id="{REALGUID}" Advertise="no" Description="MyApplication" LocalService="MyApplication" ServiceParameters="-Service" />
<RegistryValue Root="HKCR" Key="AppID\{REALGUID}" Name="Group" Value="[GROUP]" Type="string" Action="write" />
<ServiceInstall
Id="ServiceInstaller"
Type="ownProcess"
Name="MyApplication"
DisplayName="My Application"
Description="Some Description"
Start="auto"
Account="LocalSystem"
Interactive="yes"
ErrorControl="normal"
Vital="yes" >
<ServiceDependency Id="[FTPSERVICE]" />
</ServiceInstall>
<ServiceControl Id="MyApplication" Name="MyApplication" Start="install" Stop="uninstall" Remove="uninstall" Wait="yes" />
</Component>