Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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
找不到目标计算机上肯定存在的专用程序集 我们将VisualC++运行时分配为(即,将MSVCP90.DLL、MSVCM90.DLL、MVCR90.DLL和MySoF.VC90.CRT清单放入与我们的应用程序的可执行文件相同的目录中的McCSO.VC90.CRT文件夹)。到目前为止,在每台非dev机器(数百台)上,这都很好。然而,我一直在跟踪一个特定的问题机器,它完全无法找到这些程序集_C++_Visual Studio 2008_Msvcr90.dll_Vcredist - Fatal编程技术网

找不到目标计算机上肯定存在的专用程序集 我们将VisualC++运行时分配为(即,将MSVCP90.DLL、MSVCM90.DLL、MVCR90.DLL和MySoF.VC90.CRT清单放入与我们的应用程序的可执行文件相同的目录中的McCSO.VC90.CRT文件夹)。到目前为止,在每台非dev机器(数百台)上,这都很好。然而,我一直在跟踪一个特定的问题机器,它完全无法找到这些程序集

找不到目标计算机上肯定存在的专用程序集 我们将VisualC++运行时分配为(即,将MSVCP90.DLL、MSVCM90.DLL、MVCR90.DLL和MySoF.VC90.CRT清单放入与我们的应用程序的可执行文件相同的目录中的McCSO.VC90.CRT文件夹)。到目前为止,在每台非dev机器(数百台)上,这都很好。然而,我一直在跟踪一个特定的问题机器,它完全无法找到这些程序集,c++,visual-studio-2008,msvcr90.dll,vcredist,C++,Visual Studio 2008,Msvcr90.dll,Vcredist,他们正在运行XP,因此当他们尝试启动我们的应用程序时,他们会得到: 此应用程序启动失败,因为应用程序 配置不正确。重新安装应用程序可能会解决此问题 问题 我让他们在我们的应用程序的exe上运行,这表明它找不到msvcp90.dll或msvcr90.dll。然后我让他们追踪我们应用程序的目录内容,结果显示那些“丢失”的DLL实际上在它们应该在的地方(在exe旁边的Microsoft.VC90.CRT目录中),但是,应用程序启动时没有找到它们 作为最后一种手段,我将直接使用它们,但这主要是为了排除故

他们正在运行XP,因此当他们尝试启动我们的应用程序时,他们会得到:

此应用程序启动失败,因为应用程序 配置不正确。重新安装应用程序可能会解决此问题 问题

我让他们在我们的应用程序的exe上运行,这表明它找不到msvcp90.dll或msvcr90.dll。然后我让他们追踪我们应用程序的目录内容,结果显示那些“丢失”的DLL实际上在它们应该在的地方(在exe旁边的Microsoft.VC90.CRT目录中),但是,应用程序启动时没有找到它们

作为最后一种手段,我将直接使用它们,但这主要是为了排除故障,因为我们更愿意继续分发DLL,而不需要额外的安装程序(我们的应用程序可以在不进行任何安装的情况下运行)


我可能还应该包括我们的应用程序自己的清单:


是对私有程序集的一个很好的总结,但到目前为止,它并没有帮助我解决问题


更新:将DLL移动到与EXE相同的目录后,仍无法启动。然后,在之后,它启动了fine。因此,它似乎没有在本地目录中查找,或者出于某种原因认为本地DLL不可接受。

同一台Windows计算机上当前是否安装了任何版本的Visual Studio

你也可以仔细看看。此链接包含有关操作系统如何搜索DLL的信息。有几个注册表项可能会改变这种行为


消除此依赖关系的另一个选项是在项目中使用带有MFC/ATL的静态链接。您的二进制文件将更大,但您可以一起消除此问题。

同一台Windows计算机上当前是否安装了任何版本的Visual Studio

你也可以仔细看看。此链接包含有关操作系统如何搜索DLL的信息。有几个注册表项可能会改变这种行为


消除此依赖关系的另一个选项是在项目中使用带有MFC/ATL的静态链接。您的二进制文件将更大,但您可以一起消除这个问题。

我本想早点回到这个问题上,但它被搁置起来,等待测试用例。原来这是一个非常简单的问题:它正在寻找错误的DLL版本。由VS生成的清单没有设置为使用我从VS中提取的可再发行文件的相同版本。通过禁用清单的自动生成,并在我自己的清单中设置版本以匹配我正在重新分发的DLL的版本,它可以工作。

我想尽快回到这一点,但它在等待测试用例时被搁置了。原来这是一个非常简单的问题:它正在寻找错误的DLL版本。由VS生成的清单没有设置为使用我从VS中提取的可再发行文件的相同版本。通过禁用清单的自动生成,只需在我自己的清单中设置版本以匹配我正在重新分发的DLL的版本,就可以了

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="OurApp.Name" type="win32"/>
  <description>Our App Description</description>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b">
      </assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>