2016-11-25 141 views
0

我有2 exe,A.exe和B.exe。 A.exe被添加到注册表的运行键,以便它启动与Windows启动。 A的内幕主力,有这样的代码:当启动process.Start()启动时程序崩溃

Process pr = new Process(); 
pr.StartInfo.FileName = "B.exe"; 
pr.StartInfo.Arguments = SomeArgs; 
pr.Start(); 

A和B是在同一目录下。如果我通过双击手动启动A,它工作正常,B启动正常。但是,当我试图重新启动窗口来检查它是否可以在Windows启动时正常工作时,每当A.exe崩溃,因此B.exe从未启动。我认为这是A中的一些其他问题,也许系统加载一些依赖性很慢,但是没有,当我删除上面的代码部分时,一切正常工作在Windows启动,一个不崩溃,但B不启动。那么可能是什么问题或如何解决这个问题?

编辑:

使用尝试捕捉,这来了,我不知道为什么这虽然想出了:

System.ComponentModel.Win32Exception:系统无法找到 指定的文件 System.Diagonstics.Process.StartWithShellExecuteEx(ProcessSt artInfo startInfo)at System.Diagonostics.Process.Start()at System.Diagonostics.Process.Start(ProcessStartInfo startInfo)at System.Diagnostics.Process.Start(String fileName,字符串参数)在 ....

我什至尝试完整的文件路径仍然相同的错误。但是,手动启动它不会导致错误,并且工作得很好。只是这个窗口启动正在搞乱它。

回答

0

尝试一个

Process pr = new Process(); 
pr.StartInfo.FileName = Application.StartupPath+"/B.exe"; 
pr.StartInfo.Arguments = SomeArgs; 
pr.Start(); 
+0

试过也没有运气。 –

0

我相信你可能正在运行到一个安全错误。进程需要某些权限才能工作。见安全部分在这里指出:

Process Class

想出一个办法来记录问题,看看这是你碰到的问题。

+0

使用了一个try catch,并且出现了,我不知道为什么会出现这个问题:System.ComponentModel.Win32Exception:系统找不到在System.Diagonostics的System.Diagonstics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)中指定的文件.Process.Start()在System.Diagnostics.Process.Start(ProcessStartInfo startInfo)在System.Diagnostics.Process.Start(字符串文件名,字符串参数)在.... –

+0

我甚至尝试完整的文件路径仍然相同的错误。但是,手动启动它不会导致错误,并且工作得很好。 –

+0

这基本上意味着可执行文件的路径是错误的。我知道你提到你尝试了完整的道路。你的路径是否包含空格? – JuanR

0

尝试指定WorkingDirectory:

Process pr = new Process(); 
pr.StartInfo.WorkingDirectory = @"C:\path\to"; 
pr.StartInfo.FileName = "B.exe"; 
pr.StartInfo.Arguments = SomeArgs; 
pr.Start();