Windows installer 在64位Windows上找不到msi产品代码

Windows installer 在64位Windows上找不到msi产品代码,windows-installer,registry,Windows Installer,Registry,考虑以下几点: 我使用VS2010创建一个C.NET 32位windows服务target=x86、framework=4.0和一个相应的setup project.msi 我的开发机器是32位Widnows XP Professional SP3 我有一个特殊的需求:我必须能够通过编程从一个单独的32位应用程序卸载我的服务。为此,在卸载时,卸载应用程序必须知道已安装服务的产品代码,以便能够调用msiexec.exe/uninstall 我已经解决了这个问题,让32位卸载应用程序在注册表中搜索已

考虑以下几点:

我使用VS2010创建一个C.NET 32位windows服务target=x86、framework=4.0和一个相应的setup project.msi

我的开发机器是32位Widnows XP Professional SP3

我有一个特殊的需求:我必须能够通过编程从一个单独的32位应用程序卸载我的服务。为此,在卸载时,卸载应用程序必须知道已安装服务的产品代码,以便能够调用msiexec.exe/uninstall

我已经解决了这个问题,让32位卸载应用程序在注册表中搜索已安装的组件,直到找到与我的服务名称匹配的组件,然后获取相应的产品代码。这是非常简单,它的工作只是罚款

今天我尝试在64位Windows7上安装我的服务。该服务运行正常,但在卸载时,我的32位卸载应用程序无法再在注册表中找到产品代码。这是因为32位卸载程序应用程序只能看到注册表的重定向wow6432node部分,而安装信息由于未知原因被放在原始的无定向部分

我怎样才能解决这个问题

我可以强制安装程序将安装信息放入注册表的重定向部分吗

我可以从32位卸载程序应用程序中访问并扫描无向注册表部分吗

在安装过程中,我能否以某种方式检索产品代码并将其存储在可从32位卸载程序访问的其他位置

是否有另一种检索产品代码的方法不涉及搜索注册表


与其在注册表中搜索,不如使用WiX DTF的Microsoft.Deployment.WindowsInstaller程序集进行Windows Installer API调用,以确定您要查找的产品代码。

另一个想法:我是否应该创建一个小的64位应用程序来执行注册表搜索,然后从32位应用程序启动它卸载程序应用程序?只有64位软件包使用64位注册表配置单元。32位包写入WOW6432节点。您使用的是64位安装程序吗?我使用VS2010的标准安装项目,根据顶行中的指示,它以x86为目标。我也不明白为什么它会写入64位配置单元。请在解决方案资源管理器中选择您的安装项目,并在其属性窗格中检查目标平台。这是一个很好的建议,但我检查了它,它显示了x86。我尝试从我的解决方案中删除所有bin和obj文件夹,并从头开始重新编译,但结果相同。还有什么建议吗?