【发布时间】:2012-11-18 03:21:35
【问题描述】:
我遇到了由衍生的混合模式进程引起的托管程序集负载问题。详情见下文。假设 BinPath 和 ExecutablePath 是两个不同的有效路径。
我有一个在 BinPath 中启动的 Web 应用程序,并使用以下 ProcessStartInfo 创建了一个进程:
new ProcessStartInfo()
{
FileName = ExecutablePath + "PerformanceRunner.exe",
WorkingDirectory = ExecutablePath ,
UseShellExecute = true
};
PerformanceRunner.exe 然后成功加载驻留在 ExecutablePath 中的几个非托管 DLL(这可以通过查看 VS 中的“模块”窗口来验证)。然后它尝试加载也位于 ExecutablePath 中的托管程序集,但这失败了。这是这个的融合日志 - 注意 BinPath 是“G:\TOPSS\TOPSS New\Common\Service\Bin”,托管程序集是 TPSSCDQ.dll。 TPSSCDQ 驻留在 ExecutablePath 中。
* 组装活页夹日志条目(11/29/2012 @ 4:16:11 PM)*
操作失败。绑定结果:hr = 0x80070002。系统无法 找到指定的文件。
程序集管理器从以下位置加载: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll 下运行 可执行 G:\TOPSS\TOPSS New\Common\Service\Bin\PerformanceRunner.exe
=== 预绑定状态信息 ===
日志:用户 = CORP\lbhra
LOG:DisplayName = TpssCDQ,Version=1.0.4612.26218,Culture=neutral, PublicKeyToken=null(完全指定)
LOG:Appbase = file:///G:/TOPSS/TOPSS New/Common/Service/Bin/
LOG:初始 PrivatePath = NULL
LOG:动态基数 = NULL
LOG:缓存基础 = NULL
日志:AppName = PerformanceRunner.exe
调用程序集:(未知)。
===
LOG:此绑定在默认加载上下文中开始。
LOG:未找到应用程序配置文件。
LOG:使用主机配置文件:
LOG:使用来自的机器配置文件 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG:此时未将策略应用于参考(私有、 自定义、部分或基于位置的程序集绑定)。
LOG:正在尝试下载新的 URL 文件:///G:/TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ.DLL。
LOG:正在尝试下载新的 URL 文件:///G:/TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ/TpssCDQ.DLL。
LOG:正在尝试下载新的 URL 文件:///G:/TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ.EXE。
LOG:正在尝试下载新的 URL file:///G:/TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ/TpssCDQ.EXE。
LOG:所有探测 URL 都已尝试并失败。
我不完全了解 PrivatePath、Appbase 或 Dynamicbase 是什么,但这些路径中的至少一个不应该是工作目录(ExecutablePath)吗?我已经使用 GetCurrentDirectory 验证了工作目录设置正确。我真的很感激这个,因为我很困惑。
【问题讨论】:
标签: c# c++ process .net-assembly mixed-mode