2011-07-20 84 views
1

打破,裸機場景: 我在C#中的程序來調用一個.exe文件內CMD(使用的Process.Start),經過一些必需的參數。集成.exe文件到Visual Studio項目

我想要做的:包括exe文件到項目中,這樣我不用調用CMD做。

有什麼想法?

回答

5

如果你只是想包括所以你不必運送兩個文件,那麼只需將其作爲「嵌入式資源」(參見項目選項)包含到項目中,然後就可以調用ResourceManager.GetStream並將其寫入文件並調用Process.Start。

如果你想集成了exe文件的功能,使不需要的exe了(沒有的Process.Start),那麼你需要的源代碼

編輯: 「寫入到文件」是如果exe是.NET,則不需要 - 那麼您可以直接從資源流中加載它作爲Assembly/AppDomin並執行它。

+1

是的,但你讓它「寫入文件」的聲音很容易。不是。您必須確保您將文件寫入程序的上下文* always *具有讀/寫權限的地方。在實踐中,很難確保這一點。這意味着你不能將EXE寫入「Temp」文件夾,或者你的應用程序中斷了。將EXE作爲獨立的依賴項分發好得多。一旦你提取它,你仍然*將不得不「調用cmd」,所以這是毫無意義的。 –

+2

你是對的 - 對於本機exe文件。但如果是一個.NET EXE你不必把它寫入一個文件在所有 - 你可以加載+從流中執行它通過的AppDomain /大會......你會 – Yahia

+0

如何做到這一點使用的AppDomain /組裝如果它的'在.NET中?我是一個新手。 – TarunG

3

您可以添加一個exe作爲嵌入資源(只是在解決方案資源管理文件夾上點擊右鍵,添加現有項目,然後得到它的屬性,並將其設置爲嵌入資源)。但是,您可能無法輕鬆地執行它 - 您需要將其保存到磁盤然後執行它(這不能解決您陳述的必須ShellExecute.exe文件的問題,但可以解決問題必須向最終用戶運送多個文件)。

如果你的源代碼,那麼你就可以重新打包的exe作爲一個DLL,或者直接集成到你的程序代碼。

1

如果EXE是.NET程序集,您可以使用ILMerge exe文件合併到主裝配。然後您可以直接在exe中調用代碼。

相關問題