2012-11-24 113 views
4

我有這樣的代碼:C#無法啓動系統EXE進程

Process myProcess = new Process(); 

myProcess.StartInfo.UseShellExecute = true; 
myProcess.StartInfo.FileName = "rdpclip.exe"; 
myProcess.Start(); 

啓動其位於SYSTEM32

我總是說,系統文件無法找到錯誤的exe文件。在Windows 2008服務器。

即使我設置了StartupInfo.FileName =「c:\\ windows \\ system32 \\ rdpclip.exe」它仍然沒有找到該文件!

它工作,如果我把文件放在其他文件夾中,但在System32中它不會啓動。我只需要殺死這個進程並重新開始,但是我從來沒有想過在C#中做這麼簡單的事情真的很痛苦!

+2

是您的應用程序在32位嗎?你的操作系統是64位的嗎?我注意到rdpclip.exe位於C:\ windows \ system32但不是c:\ windows \ syswow64(這是作爲32位應用程序運行時映射到system32的文件夾)。 – akhisp

+0

它是64位操作系統,但rdpclip.exe位於system32文件夾中。 –

回答

4

此錯誤具有誤導性,因爲它通常意味着您沒有該文件夾的權限。嘗試構建您的程序,然後右鍵單擊生成的.exe,然後單擊「以管理員身份運行」。

+0

這就是我所做的,但我得到同樣的錯誤。 –

3

試試這個(你需要導入了System.Runtime.InteropServices):

[DllImport("kernel32.dll", SetLastError = true)] 
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr); 

[DllImport("kernel32.dll", SetLastError = true)] 
public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr); 

IntPtr ptr = IntPtr.Zero; 
if(Wow64DisableWow64FsRedirection(ref ptr)) 
{ 
    Process myProcess = new Process(); 
    myProcess.StartInfo.UseShellExecute = true; 
    myProcess.StartInfo.FileName = "rdpclip.exe"; 
    myProcess.Start(); 
    Process.Start(myProcess); 
    Wow64RevertWow64FsRedirection(ptr);  
}