Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows安装程序(VS2008)中以x86和x64为目标_C#_Visual Studio_Operating System_Windows Installer_Target Platform - Fatal编程技术网

C# 在Windows安装程序(VS2008)中以x86和x64为目标

C# 在Windows安装程序(VS2008)中以x86和x64为目标,c#,visual-studio,operating-system,windows-installer,target-platform,C#,Visual Studio,Operating System,Windows Installer,Target Platform,是否有任何方法可以使用Visual Studio 2008创建Windows安装程序,以同时针对x86和x64操作系统 在TargetPlatform属性中,我只使用了:x86,x64,Itanium。我知道在某个地方还有一个叫做Any-CPU,但我找不到它 另外,我不想创建两个设置 有什么想法吗 谢谢。我可能错了,但我很确定这是办不到的。 您提到的任何CPU都由.Net编译器用于程序集(.Net程序集在默认情况下与体系结构无关,但可以强制编译为x86或x64)。 但由于windows安装程序是

是否有任何方法可以使用Visual Studio 2008创建Windows安装程序,以同时针对x86和x64操作系统

在TargetPlatform属性中,我只使用了:
x86
x64
Itanium
。我知道在某个地方还有一个叫做
Any-CPU
,但我找不到它

另外,我不想创建两个设置

有什么想法吗


谢谢。

我可能错了,但我很确定这是办不到的。 您提到的任何CPU都由.Net编译器用于程序集(.Net程序集在默认情况下与体系结构无关,但可以强制编译为x86或x64)。 但由于windows安装程序是本机win32 exe,因此无法将其生成为“任何CPU”。
因此,您必须生成两个相同的安装程序,一个用于x86,另一个用于x64。

这可以完成,但VS安装程序无法完成。我有一位同事通过InstallShield产品实现了这一点,但我要说的是,这是一个绝对的黑客行为,最终他得到了一个更好的结果,制作了两个不同的安装程序,每个目标位对应一个

我还需要告诉你:

在TargetPlatform属性中,我只有:x86、x64、安腾。我知道在某处还有一个叫做任何CPU


TargetPlatform
属性不会更改您正在安装的应用程序的位,您正在使它与程序集本身的目标平台混淆。MSI是运载工具,其中的.Net组件是有效载荷TargetPlatform设置不控制.Net程序集的JIT编译方式,而是用于帮助确定安装路径(如果设置为x86,则默认安装路径应为
%PROGRAMFILES(x86)%
,不同的注册表配置单元将成为目标。

可以这样做,但不能直接使用Visual Studio。通常的方法是:

  • 创建包含32位和64位资源的通用MSI
  • 创建(一个用于32位,一个用于64位)以基于目标平台修改MSI
  • 使用EXE引导程序动态检测平台并对MSI应用正确的转换
您可以使用创建转换。如果您想要商业解决方案,可以尝试高级安装程序或InstallShield


如果这看起来太复杂,您可以简单地使用单独的32位和64位软件包。

您部分正确-MSI不是一个可执行文件*,它实际上是一个由
msiexec.exe
读取和操作的数据库(*如果是“MSI”具有
.exe
后缀。它是一个封装MSI的引导程序,引导程序是编译代码,但可以在64位系统上运行,不会出现任何问题)。