我在以前的一个版本中安装了两次服务组件。
<Component Id="MyServiceWin7" Guid="{GUID_WIN7}">
<File Id="mysvc_Win7"
Name="mysvc.exe"
Source=mysvc.exe"
KeyPath = "yes"/>
<ServiceControl Id="MYSVC_Win7"
Name="MYSVC"
Remove="uninstall"
Start="install"
Stop="both"
Wait="no" />
<ServiceInstall Id="My_Svc_Win7"
Name="MYSVC"
DisplayName="MYSVC"
Type="ownProcess"
Start="auto"
ErrorControl="normal"
LoadOrderGroup=""
Description="My service">
</component>
<Component Id="MyServiceWin8" Guid="{GUID_WIN8}">
<File Id="mysvc_Win8"
Name="mysvc.exe"
Source=mysvc.exe"
KeyPath = "yes"/>
<ServiceControl Id="MYSVC_Win8"
Name="MYSVC"
Remove="uninstall"
Start="install"
Stop="both"
Wait="no" />
<ServiceInstall Id="My_Svc_Win8"
Name="MYSVC"
DisplayName="MYSVC"
Type="ownProcess"
Start="auto"
ErrorControl="normal"
LoadOrderGroup=""
Description="My service">
</component>
所以会有两个 MYSVC 组件的实例。两者都映射到 MYSVC.exe。
我错过了上一版本中的操作系统版本条件检查。
它运行成功。
我正在考虑在下一次更新中删除虚拟的附加组件(GUID_Win7 或 GUID_WIN8)。
我如何删除它,我需要编写自定义操作吗?
任何帮助,将不胜感激。
编辑:: 请找到答案,
mysvc 有一些第三方库依赖操作系统特定于 Win7 和 Win8,如果我们检查 sc qc mysvc 我创建了服务并且 mysvc.exe 映射到服务 binpath,它的工作意味着它安装成功
是的,这两个服务组件的目标相同,当我执行 sc 查询 mysvc 时只有一个组件
- 不,只有一项服务。mysvc.exe 是磁盘上的 win8 版本。
感谢您的建议,断开链接。
目前,我有 win 7 和 win8 的 %ProgramFiles%\MyApp\mysvc.exe 通用路径。所以我的问题是是否创建新的通用路径来打破先前的链接。ProgramFiles%\MyApp\mysvc\mysvc.exe [[NEW_GUID1]] for win7 ProgramFiles%\MyApp\mysvc\mysvc.exe [[NEW_GUID2]] for win8
带有 [[OLD_GUID1]] 、 [[OLD_GUID2]] 的组件将永远在系统上,直到我的产品被卸载,所以我们不能只删除带有 [[OLD_GUID1]]、[[OLD_GUID2]] 的组件来清理陈旧(非功能性)组件
谢谢