Installation 32位MSI:将64位应用程序的快捷目标路径转换为32位路径
我正在处理一个部署项目(基于Wix),该项目用于部署应用程序以与AutoCAD一起运行,并在传递自身参数的同时创建AutoCAD的acad.exe的快捷方式 为了实现这一点,有一个自定义操作dll(C++),它可以迭代Autocad的注册表项,获取“acad.exe”位置,并在运行时使用MyInstaller.MSI中的MSI Api方法创建/更新快捷方式 问题: 在x64位操作系统(如Windows 7)上,自定义操作是从注册表读取正确的“acad.exe”位置,即C:\Program Files\AutoCAD 2010\acad.exe,并在运行时更新msi中的快捷方式属性。但是,当msi完成创建快捷方式时,路径将转换为32位程序文件,即C:\program files(x86)\AutoCAD 2010\acad.exe,但实际上并不存在 我的工作环境: 由于我的msi是32位(x86),所以我创建了一个属性为Win64=Yes的单独组件,并修改了自定义操作以更新/创建此组件的快捷方式。但仍将快捷方式中的目标路径转换为C:\Program文件(x86) 我知道,如果我将MSI转换为x64操作系统,这可能会得到解决,但目前,我不能做这么大的改变 32位msi有没有办法创建包含x64操作系统路径的快捷方式 如蒙帮助,我们将不胜感激Installation 32位MSI:将64位应用程序的快捷目标路径转换为32位路径,installation,64-bit,wix,windows-installer,32-bit,Installation,64 Bit,Wix,Windows Installer,32 Bit,我正在处理一个部署项目(基于Wix),该项目用于部署应用程序以与AutoCAD一起运行,并在传递自身参数的同时创建AutoCAD的acad.exe的快捷方式 为了实现这一点,有一个自定义操作dll(C++),它可以迭代Autocad的注册表项,获取“acad.exe”位置,并在运行时使用MyInstaller.MSI中的MSI Api方法创建/更新快捷方式 问题: 在x64位操作系统(如Windows 7)上,自定义操作是从注册表读取正确的“acad.exe”位置,即C:\Program Fil
非常感谢。这一次,你正在逆流而上对抗MSI。(尽管我能理解原因。) 官方MSI从来都不是平台nuetral。我假设您正在使用自定义操作读取注册表值,因为MSI的AppSearch/Reglocator会将您约束到WoWSys64节点。在那之后,MSI甚至将取代对程序文件的硬编码引用,作为应用程序兼容性方法的一部分(基本上,microsoft假定您不知道自己在做什么,并且他们知道您真正想做什么) 非正式地-阅读这篇文章,找到一个我想出的解决这个问题的方法。总结是,我发现如果将C:\Program Files\转换为短路径(C:\Progra~1),MSI就没有足够的智能来理解您所指的内容,因此它不会替换该值 请注意,这是一种黑客行为,无法判断微软是否会在未来的版本中“修复”。我唯一能想到的另一种方法是不使用快捷方式表,而是编写自定义操作来为您创建快捷方式 如果你不想和MSI一起游泳,考虑一下这一点。创建一个小的64位EXE(是的,可以将64位或任意CPU EXE部署到程序文件x86是x86 MSI),作为AutoCAD的前端启动器。使其查询注册表表并查找文件,然后启动该文件,或者显示一条消息,如果找不到AutoCAD,则说明AutoCAD不可用
如果您这样做,您的安装将更加干净。您在这一次的MSI上逆流而上。(尽管我能理解原因。) 官方MSI从来都不是平台nuetral。我假设您正在使用自定义操作读取注册表值,因为MSI的AppSearch/Reglocator会将您约束到WoWSys64节点。在那之后,MSI甚至将取代对程序文件的硬编码引用,作为应用程序兼容性方法的一部分(基本上,microsoft假定您不知道自己在做什么,并且他们知道您真正想做什么) 非正式地-阅读这篇文章,找到一个我想出的解决这个问题的方法。总结是,我发现如果将C:\Program Files\转换为短路径(C:\Progra~1),MSI就没有足够的智能来理解您所指的内容,因此它不会替换该值 请注意,这是一种黑客行为,无法判断微软是否会在未来的版本中“修复”。我唯一能想到的另一种方法是不使用快捷方式表,而是编写自定义操作来为您创建快捷方式 如果你不想和MSI一起游泳,考虑一下这一点。创建一个小的64位EXE(是的,可以将64位或任意CPU EXE部署到程序文件x86是x86 MSI),作为AutoCAD的前端启动器。使其查询注册表表并查找文件,然后启动该文件,或者显示一条消息,如果找不到AutoCAD,则说明AutoCAD不可用
如果您这样做,您的安装将更加干净。好的,我能够解决这个问题: 问题是,64位操作系统上的32位MSI正在将路径(在快捷方式表中)转换为32位等效路径,即我们的自定义操作dll正在从64位注册表项获取AutoCAD的路径,即C:\Program Files\AutoCAD 2010\并将此路径注入MSI的快捷方式表和目录表。但当MSI编写快捷方式时,它正在将其转换为C:\Program Files(x86)\AutoCAD 2010 我们不能在32位MSI中包含64位组件,但也可以在32位MSI中包含64位组件 然而,在我的例子中,我必须使用64位组件作为快捷方式,而其他组件将保持32位 因此,我已将32位MSI转换为64位MSI,并在包信息中添加Plantform=x64。并将组件声明为Win64=Yes。 这解决了我的问题,现在我在捷径中找到了正确的路径 因此,现在我有两个独立的安装程序,即分别用于32位和64位 致意
法鲁克好的,我能解决它: 问题是,64位操作系统上的32位MSI正在将路径(在快捷方式表中)转换为32位等效路径,即我们的自定义操作dll正在从64位注册表项获取AutoCAD的路径,即C:\Program Files\AutoCAD 2010\并将此路径注入MSI的快捷方式表和目录表。但当MSI编写快捷方式时,它正在将其转换为C:\Program Files(x86)\AutoCAD 2010 我们不能