Visual studio Vista中设置自定义操作的Microsoft VC运行时要求和SXS错误

Visual studio Vista中设置自定义操作的Microsoft VC运行时要求和SXS错误,visual-studio,windows-vista,runtime,setup-project,Visual Studio,Windows Vista,Runtime,Setup Project,我使用VS2005为正在开发的应用程序创建了一个安装项目,该应用程序在Windows 2000和XP上安装良好,但当我尝试在Vista上运行安装程序时,它会出现以下错误: 此窗口有问题 安装程序包。所需的程序 无法完成此安装 被运行 此错误发生在安装过程的最后,在它已经将所有文件复制到磁盘上之后,并且在它尝试运行自定义操作可执行文件时发生 自定义动作二进制文件是一个名为AuthCuut.EXE的文件,用C++编写。它非常基本,只需处理安装、提交、卸载和回滚操作,只需设置一些注册表项并启动几个批处

我使用VS2005为正在开发的应用程序创建了一个安装项目,该应用程序在Windows 2000和XP上安装良好,但当我尝试在Vista上运行安装程序时,它会出现以下错误:

此窗口有问题 安装程序包。所需的程序 无法完成此安装 被运行

此错误发生在安装过程的最后,在它已经将所有文件复制到磁盘上之后,并且在它尝试运行自定义操作可执行文件时发生

自定义动作二进制文件是一个名为AuthCuut.EXE的文件,用C++编写。它非常基本,只需处理安装、提交、卸载和回滚操作,只需设置一些注册表项并启动几个批处理脚本即可完成安装

在安装过程中,我运行了SXSTrace以查看它的故障,并得到以下跟踪:

=================
Begin Activation Context Generation.
Input Parameter:
    Flags = 0
    ProcessorArchitecture = x86
    CultureFallBacks = en-US;en
    ManifestPath = C:\Program Files\MyApp\InstallCustom.exe
    AssemblyDirectory = C:\Program Files\MyApp\
    Application Config File = 
-----------------
INFO: Parsing Manifest File C:\Program Files\MyApp\InstallCustom.exe.
    INFO: Manifest Definition Identity is (null).
    INFO: Reference: Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053"
INFO: Resolving reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053".
    INFO: Resolving reference for ProcessorArchitecture x86.
        INFO: Resolving reference for culture Neutral.
            INFO: Applying Binding Policy.
                INFO: Find publisher policy at C:\Windows\WinSxS\manifests\x86_policy.8.0.microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.1434_none_516c10c30f4aae68.manifest
                INFO: No binding policy redirect found.
            INFO: Begin assembly probing.
                INFO: Did not find the assembly in WinSxS.
                INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_32\Microsoft.VC80.CRT\8.0.50727.4053__1fc8b3b9a1e18e3b\Microsoft.VC80.CRT.DLL.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT.DLL.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT.MANIFEST.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT\Microsoft.VC80.CRT.DLL.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT\Microsoft.VC80.CRT.MANIFEST.
                INFO: Did not find manifest for culture Neutral.
            INFO: End assembly probing.
    ERROR: Cannot resolve reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053".
ERROR: Activation Context generation failed.
End Activation Context Generation.

=================
Begin Activation Context Generation.
Input Parameter:
    Flags = 0
    ProcessorArchitecture = x86
    CultureFallBacks = en-US;en
    ManifestPath = C:\Program Files\MyApp\InstallCustom.exe
    AssemblyDirectory = C:\Program Files\MyApp\
    Application Config File = 
-----------------
INFO: Parsing Manifest File C:\Program Files\MyApp\InstallCustom.exe.
    INFO: Manifest Definition Identity is (null).
    INFO: Reference: Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053"
INFO: Resolving reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053".
    INFO: Resolving reference for ProcessorArchitecture x86.
        INFO: Resolving reference for culture Neutral.
            INFO: Applying Binding Policy.
                INFO: Find publisher policy at C:\Windows\WinSxS\manifests\x86_policy.8.0.microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.1434_none_516c10c30f4aae68.manifest
                INFO: No binding policy redirect found.
            INFO: Begin assembly probing.
                INFO: Did not find the assembly in WinSxS.
                INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_32\Microsoft.VC80.CRT\8.0.50727.4053__1fc8b3b9a1e18e3b\Microsoft.VC80.CRT.DLL.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT.DLL.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT.MANIFEST.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT\Microsoft.VC80.CRT.DLL.
                INFO: Attempt to probe manifest at C:\Program Files\MyApp\Microsoft.VC80.CRT\Microsoft.VC80.CRT.MANIFEST.
                INFO: Did not find manifest for culture Neutral.
            INFO: End assembly probing.
    ERROR: Cannot resolve reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053".
ERROR: Activation Context generation failed.
End Activation Context Generation.

正如您所见,它找不到微软.VC80.CRT,VisualC++运行时DLL。 奇怪的是,通过添加合并模块:“Microsoft_VC80_CRT_x86.msm”和“policy_8_0_Microsoft_VC80_CRT_x86.msm”,这个运行时已经包含在安装程序中了

但是,我怀疑这些合并模块在发生此错误之前不会实际应用…
但是在InstallCustom.exe运行之前,我还没有弄清楚如何包含这些所需的文件。我甚至尝试过在安装之前将运行时复制到该文件所在的目录中


是否有解决此问题的方法?为什么这不是XP和2000的问题,而是Vista的问题……我认为它应该有这个运行时。

您应该使用CRuntime的静态版本(如果可能的话),最好的做法是自定义操作将具有尽可能少的先决条件。这将使自定义操作稍微大一点(在10 KB范围内),但这是值得的


要使用静态CRuntime库进行编译,请转到
项目属性\C/C++\code生成\Runtime库

不要忘记,如果您的exe需要其他需要该版本CRuntime的dll,那么它们也需要使用静态版本进行编译。

好的,但是我该怎么做呢。我找不到如何静态地将其编译成二进制文件。“运行时库”属性设置为“多线程DLL”,是否将其更改为“多线程”?