我正在尝试使用Process.Start()启动可执行文件。当exe没有DLL依赖项时,它工作正常。但是,当我需要包含2个DLL时,它不起作用。我已经尝试设置WorkingDirectory,并验证了那里存在2个必需的DLL。有什么想法吗?
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "memcached.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = arguments; //not shown
startInfo.WorkingDirectory = Environment.CurrentDirectory;
try
{
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit();
}
}
catch (Exception ex)
{
Trace.TraceError(ex.Message); // never gets here
}
这是code based on the Windows Azure Memcached Solution Accelerator。当memcached无法启动时,将显示一个对话框。遗憾的是,当代码在云中远程运行时,您无法看到这一点。
答案 0 :(得分:1)
问题可能是您将WorkingDirectory
设置为当前进程的当前目录(可能是任何位置,不一定是包含程序的目录)。尝试将工作目录设置为包含要启动的exe的目录。
另外,您是否确认DLL位于memcached.exe
(或memcached.exe
所需的位置)?
答案 1 :(得分:1)
我有类似的问题试图启动另一个需要DLL但无法找到它的进程。在我的情况下,解决方案非常简单,缺少'\'。
procInfo.WorkingDirectory = @"C:\filedir"; //won't work
procInfo.WorkingDirectory = @"C:\filedir\" ; //would do the trick
procInfo.WorkingDirectory = Enviroment.CurrentDirectory; //== "C:\filedir", that won't work either
procInfo.WorkingDirectory = Enviroment.CurrentDirectory + '\\'; // would work.
希望对你有所帮助。
答案 2 :(得分:0)
尝试将.EXE文件和引用的程序集放在同一位置,并将WorkingDirectory.WorkingDirectory
定义到该文件夹。这可能会很好。
一个 extreme 替代方法是引用程序集(DLL)并将它们注册到GAC中的强名称。
在考虑这个选项之前,你应该用尽所有其他选择。