2

我有一个 Win32 程序集(我的 .NET 代码上的 C++/CLI 包装器),它应该安装在 WinSxS 中,并且应该由使用 API 的客户端应用程序从该位置引用。我对如何在 WinSxS 中安装 Win32 程序集进行了一些研究,最终能够通过使用 mainfest 和目录文件来完成它。

现在的问题是我无法使用我为测试目的创建的控制台应用程序中的程序集。我<dependency>在 exe 清单中添加了一个部分来引用程序集(如下所示),但它不起作用。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity name="MyAssembly" processorArchitecture="x86" publicKeyToken="10f783dc6145a3s0" type="win32" version="1.0.0.58">
      </assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

exe 失败并显示错误消息:程序无法启动,因为您的计算机中缺少 MyAssembly.dll。尝试重新安装程序以解决此问题。

在检查 Procmon 时,似乎 exe 仅在 exe 位置和 Path 环境变量中指定的所有位置中搜索 dll。当我将 dll 的 WinSxS 位置放在 Path 变量中并执行应用程序时,它工作正常。我想知道在生成导致问题的 exe 清单时是否缺少任何其他项目设置。想法?

4

1 回答 1

0

问题原来是 UAC 项目设置。将 UAC 属性设置为 No 解决了该问题,并且应用程序现在能够加载程序集,而无需使用诸如添加到 PATH 变量之类的变通方法。

于 2015-01-17T14:41:56.373 回答