在GAC注册并致电.exe

时间:2015-11-30 11:39:31

标签: c# dll 32bit-64bit gac

背景

我正在使用一个项目,我有一个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的新手,我在这里有两个问题:

  1. 当这两个文件位于GAC中时,我能确保MyDll.dll启动MyExe.exe吗?我像这样启动MyExe.exe:

    System.Diagnostics.Process.Start("MyExe.exe");
    
  2. 这是不错的做法还是跳过GAC会更好?

1 个答案:

答案 0 :(得分:3)

   Process.Start("MyExe.exe");

请求操作系统找到并启动MyExe.exe文件。它将从不在GAC中查找该文件,它不知道这是一个查找可执行文件的地方。它也不可能完成这项工作,它并不了解你想要的具体版本。

GAC是托管代码实现细节,只有CLR知道它。鸡蛋和鸡蛋,CLR不会启动,直到在EXE开始运行后

将EXE纳入GAC没有意义的基本原因是什么。它们属于C:\ Program Files。