背景
我正在使用一个项目,我有一个32位的dll(我们称之为MyDll.dll)。我不得不使MyDll.dll适用于32位和64位应用程序,但由于MyDll.dll正在调用其他32位DLL我创建了一个32位.exe作为代理(我们称之为MyExe.exe)。现在我可以将MyDll.dll编译为AnyCPU,它将启动并向MyExe.exe发送调用,该编译为32位。当我将MyDll.dll和MyExe.exe放在项目的Bin文件夹中时,这是有效的。 (有关背景的更详细说明,请参阅this question)
我的问题:
我开始使用的32位DLL已在GAC(GAC_32)中注册。我设法在GAC(GAC_MSIL)中注册编译为AnyCPU的MyDll.dll,我可以看到它被正确使用。但是,当我在GAC(GAC_32)中注册32位MyExe.exe时,它未被使用。
我是GAC的新手,我在这里有两个问题:
当这两个文件位于GAC中时,我能确保MyDll.dll启动MyExe.exe吗?我像这样启动MyExe.exe:
System.Diagnostics.Process.Start("MyExe.exe");
这是不错的做法还是跳过GAC会更好?
答案 0 :(得分:3)
Process.Start("MyExe.exe");
请求操作系统找到并启动MyExe.exe文件。它将从不在GAC中查找该文件,它不知道这是一个查找可执行文件的地方。它也不可能完成这项工作,它并不了解你想要的具体版本。
GAC是托管代码实现细节,只有CLR知道它。鸡蛋和鸡蛋,CLR不会启动,直到在EXE开始运行后
将EXE纳入GAC没有意义的基本原因是什么。它们属于C:\ Program Files。