请考虑以下事项:
我使用VS2010创建C#.NET 32位Windows服务(target = x86,framework = 4.0)和相应的安装项目(.msi)。
我的开发机器是32位Widnows XP Professional SP3。
我有一个特殊的需求:我必须能够从一个单独的32位应用程序以编程方式卸载我的服务。为此,卸载应用程序必须在卸载时知道已安装服务的产品代码(为了能够调用“msiexec.exe / uninstall”)。
我已经解决了这个问题,让32位卸载应用程序通过注册表搜索已安装的组件,直到遇到与我的服务名称匹配的那个,然后获取相应的产品代码。这很简单,效果很好。
今天我尝试在64位Windows 7上安装我的服务。该服务运行良好,但在卸载时,我的32位卸载应用程序无法再在注册表中找到产品代码。这是因为32位卸载程序 - 应用程序只能看到注册表的重定向(wow6432node)部分,而安装信息(原因不明)放在原始的无向部分中。
我怎样才能解决这个问题?
我可以强制安装程序将安装信息放在注册表的重定向部分吗?
我是否可以从32位卸载程序中访问并扫描无向注册表部分?
我可以 - 在安装过程中 - 以某种方式检索产品代码并将其存储在另一个地方(可从我的32位卸载程序访问)吗?
是否有其他方法可以检索不涉及搜索注册表的产品代码?
答案 0 :(得分:0)
而不是通过注册表,你应该使用WiX DTF的Microsoft.Deployment.WindowsInstaller程序集来进行Windows Installer API调用,以确定您正在寻找的ProductCode。