在GAC中注册并调用.exe

Register and call .exe in GAC

背景:

我正在处理一个项目,其中有一个 32 位 dll(我们称之为 MyDll.dll)。我必须让 MyDll.dll 适用于 32 位和 64 位应用程序,但由于 MyDll.dll 正在调用其他一些 32 位 dll,我创建了一个 32 位 .exe 作为代理(我们称之为 MyExe.exe).现在我可以将 MyDll.dll 编译为 AnyCPU,它会启动并向编译为 32 位的 MyExe.exe 发送调用。当我将 MyDll.dll 和 MyExe.exe 放入项目的 Bin 文件夹中时,这会起作用。 (更详细的背景说明可以参考

我的问题:

我开始使用的 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 会更好?

   Process.Start("MyExe.exe");

这要求操作系统找到并启动 MyExe.exe 文件。它从不 在 GAC 中查找该文件,它不知道这是查找可执行文件的地方。它也不可能完成这项工作,它不知道有关您想要的特定版本的 bean。

GAC 是一个托管代码实现细节,只有 CLR 知道。先有鸡还是先有蛋,CLR 直到 EXE 启动 运行.

后才会启动

这就是将 EXE 放入 GAC 毫无意义的根本原因。它们属于 C:\Program Files。