2012-07-10 53 views
1

我有一個Windows 7(x86)和我的控制檯應用程序(C#)。 在我的應用程序中,我需要運行一個新進程。 應用程序包括從剛:Process.Start(string); - 開始處理幾秒鐘。 C#

Process.Start(filename);

即使應用乳寧,它會創建一個新的進程,但他幾秒鐘後破壞,甚至沒有被initializated。 在調試,我看到這樣的信息:

"proc.MainModule" threw exception "System.ComponentModel.Win32Exception" 
NativeErrorCode = 299 
ExitCode = -3 

如果我運行的Windows應用程序需要 - 它運行。 請誰能幫助我?

當它以管理員身份運行時,它具有相同的錯誤。

ReadProcessMemory or WriteProcessMemory didn't complete successfullyProcess.Start(); 這個錯誤我可以在調試後看到var proc = Process.Start(filename);

AOgame.exe - 是我的可執行應用程序。這是一個遊戲Allods的exe文件。 當我試圖執行其他應用程序,他們開始好。我認爲這是AOgame.exe的問題。但我不知道如何去除錯誤。

在AOgame.exe的屬性中沒有參數。

我認爲這是反作弊保護。但如果我嘗試從cmd控制檯執行它,它將工作。

是的!我找到解決方案!首先 - 創建一個批處理文件,至極將執行AOgame.exe然後 - 從我的應用程序 很奇怪的解決方案執行批處理文件,但它的工作原理:?d

+3

你能告訴我們一些代碼?錯誤代碼299意味着要麼ReadProcessMemory或WriteProcessMemory的呼叫沒有成功完成,所以知道你正在嘗試做新的過程似乎很重要的東西。 – dlev 2012-07-10 17:00:13

+1

也許你可以告訴我們你試圖啓動什麼過程? – 2012-07-10 17:01:26

+0

任何機會,你知道如果你試圖啓動的那些可執行文件是64位或32位?另外,你也可以告訴我們如果你可以執行它們自己的那些「文件名」[在Process.Start(文件名)]中,並得到任何錯誤? – 2012-07-10 17:02:53

回答

0

也許過程需要在工作目錄中的一些文件...

嘗試設置工作目錄:

ProcessStartInfo processInfo = new ProcessStartInfo("foo.exe"); 
processInfo.WorkingDirectory = @"C:\bar"; 

Process.Start(processInfo); 
+0

感謝的答案,但這是行不通的。 – user1515479 2012-07-10 18:01:33

+0

也許遊戲有反作弊保護?你能直接在CMD控制檯和/或自制批處理文件中啓動遊戲嗎? – MaxKlaxxMiner 2012-07-10 18:53:21

+0

我認爲這是反作弊保護。但如果我嘗試從cmd控制檯執行它,它將工作。 – user1515479 2012-07-10 19:13:11

0

我會建議你使用與UseShellExecute一個實例的ProcessStartInfo設置爲false,如下所示:

ProcessStartInfo processInfo = new ProcessStartInfo("AOGame.exe"); 
processInfo.UseShellExecute = false; 

Process.Start(processInfo); 

這會強制啓動直接由可執行文件中提供的進程名稱處理,而不是依賴於shell/helper例程。如果您可以提供有關AOGame.exe在內部執行什麼操作的更多詳細信息,則可能會有所幫助。

+0

謝謝,但這並沒有幫助。 – user1515479 2012-07-10 18:16:41

+0

您可以提供有關AOGame.exe正在執行的更多技術指導嗎?這真的很有幫助。 – 2012-07-10 18:39:27

+0

作爲另一種想法,僅僅爲了證明我們沒有追逐錯誤的兔子,您是否可以嘗試在啓動參數中調用一個非常簡單的應用程序,例如記事本,並確保其正確啓動? – 2012-07-10 18:41:47

0

如果你在你的窗口工作環節STARTMENU你可以試試這個:

Process.Start("explorer.exe", @"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\foo\bar.lnk"); 

...我不放棄:-D

+0

Interestring認爲!但這不起作用 – user1515479 2012-07-10 18:20:57

0

我已經工作了一段時間。 ,我發現調試器其實並不瞭解運行的進程的字符串 我的意思是,你不能代替做這個

Process.start(path); 

您可以使用此代碼:

 string pathak="AOgame.exe"; 
     string rty = pathak.Remove(pathak.Length - 5); 
     string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\"; 
     Process.Start(path + rty + "exe"); 

希望這幫你。