2

我正在开发一个 Compact Framework 2.0 项目,我正在尝试使用 Process.Start 从另一个程序“A”中启动一个程序“B”。我以前做过几次,但这次我遇到了一些奇怪的问题。

程序“B”确实启动了,但它会导致 MissingMethodException,基本上告诉我它缺少它引用的某个程序集。问题是程序集 .dll 就在那里,与程序“B”在同一个文件夹中。如果我双击程序“B”,它运行正常,没有 MissingMethodException,只有在程序“A”中使用 Process.Start 启动时才会出现此问题。我完全不知道这里发生了什么。我尝试设置 WorkingDirectory 属性,但没有成功。关于为什么程序在通过 Process.Start 执行时无法加载其引用的任何想法?谢谢

System.Diagnostics.Process proc = new System.Diagnostics.Process();
            ProcessStartInfo startInfo = new ProcessStartInfo(programBFullPath, "argument");

            //I've been changing these two properties, have tried shell execute with both false and true, tried setting working directory and not setting it also
            startInfo.UseShellExecute = false;
            startInfo.WorkingDirectory = programBDirectory;

            proc.StartInfo = startInfo;
            proc.Start();

编辑我只是想到了一些东西......程序“A”和程序“B”都使用程序“B”未加载的.dll。如果两个程序不能同时加载相同的 .dll,那就是问题所在。是这样吗?

4

2 回答 2

1

内存压力在设备上的表现如何?如果程序 B 依赖于程序集 C,但没有足够的内存(虚拟或物理)来加载程序集 C,那么您将得到一个 MissingMethodException(而不是 OutOfMemoryException,我一直认为这更有意义)。

于 2010-08-18T15:32:41.810 回答
1

好吧,我通过在程序 B 的程序集中复制引用的代码并删除所有引用来使它工作。它远非优雅,但我无法让它以任何其他方式工作。如果有人知道可能出了什么问题,我将不胜感激。它可能会在其他时候派上用场。谢谢

于 2010-08-18T20:42:36.017 回答