我想用戶從我的網站下載一個exe文件,在這裏(同步下載)一個XML文件被注入到這個應用程序中。這個XML文件包含一個公鑰和一個簽名。如何在運行時將文件注入EXE並在程序運行期間引用該文件?
如何在下載前注入文件並在執行過程中稍後參考它?
理想情況下,我不會使用shell來注入文件,而是使用本機.NET API。
我想用戶從我的網站下載一個exe文件,在這裏(同步下載)一個XML文件被注入到這個應用程序中。這個XML文件包含一個公鑰和一個簽名。如何在運行時將文件注入EXE並在程序運行期間引用該文件?
如何在下載前注入文件並在執行過程中稍後參考它?
理想情況下,我不會使用shell來注入文件,而是使用本機.NET API。
你可以,可以輕鬆地與Mono.Cecil,你只需要編寫類似:
var module = ModuleDefinition.ReadModule ("Application.exe");
module.Resources.Add (
new EmbeddedResource (
"signature.xml",
ManifestResourceAttributes.Private,
File.ReadAllBytes ("signature.xml")));
module.Write ("Application.exe",
new WriterParameters {
StrongNameKeyPair = new StrongNameKeyPair ("keypair.snk")
});
以將來自signature.xml中文件signature.xml中的資源,然後再次登錄你的組件,你的密鑰對.snk,您用來簽署Application.exe。
並在運行時,你只需要使用:
var stream = Assembly.GetExecutingAssembly()
.GetManifestResourceStream ("signature.xml");
來檢索資源。
注入文件將其添加到您的項目。然後在解決方案資源管理器中右鍵單擊它,轉到屬性,並將其類型更改爲EmbeddedResource。
要在運行時加載它,請使用Assembly.GetManifestResourceStream()
。在這裏閱讀更多:http://msdn.microsoft.com/en-us/library/xc4235zt.aspx。
Thisgoogle result似乎很有希望。
從他寫的看來,他會在下載之前動態更改文件。 這實際上取決於您使用的服務器端語言,以及您對服務器/託管提供商帳戶的多少控制。
假設你有一個download.aspx文件,它生成這個exe文件併發送下載。 你可以做的一件事是將程序集的源代碼放到你的服務器上,然後download.aspx將它彙編併發送下載。 (困難的方法)
另一種方法是將編譯後的程序集放在服務器上,然後使用例如塞西爾(Programmically embed resources in a .NET assembly)或其他方式來更改它然後發送它下載。
將文件添加到您的項目,一般的東西沿着線:
+solution
+project
+Resources
+SomeDirectory
-SomeFile
然後轉到您的項目的屬性,進入資源標籤左側的網站,並選擇在頂部導航欄的files
資源酒吧。選擇添加資源>添加現有文件。瀏覽到剛剛放入項目的文件,然後選擇添加它。
該文件現在顯示在您的項目屬性的資源選項卡下。在「資源」選項卡中更改文件的名稱,使其更有意義。
的文件現在你的項目嵌入的資源,你可以通過以下代碼訪問它:
var MyFile = Properties.Resources.MyFile
重新閱讀OP的問題後,這不是正確的答案。標題是詢問如何將文件嵌入到exe文件中,但問題是如何將文件注入到exe文件中。我編輯了問題的標題以反映實際問題。如果你願意,隨時刪除我的答案。 – 2011-03-17 15:07:58
哎,可能你要麼要求更多的信息,或接受一個答案? – 2011-03-19 09:32:00
@JB - 對不起,忙於編碼和單元測試! – LamonteCristo 2011-03-19 14:27:47