我正在开发一个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”都使用.dll程序“B”没有加载。如果两个程序无法同时加载相同的.dll,那就是问题所在。是这种情况吗?
答案 0 :(得分:1)
设备上的内存压力如何?如果程序B依赖于程序集C,但没有足够的内存(虚拟或物理)来加载程序集C,那么你将得到一个MissingMethodException(而不是OutOfMemoryException,我一直认为这更有意义)。
答案 1 :(得分:1)
我通过复制程序B程序集中的引用代码并删除所有引用来使其工作。它远非优雅,但我不能让它以任何其他方式工作。如果有人知道可能出了什么问题我会非常感激。它可能会在其他时间派上用场。感谢