2013-02-08 34 views
3

我發現可以將文件(* .jpg)添加到Visual Studio 2010中的C#資源。據我所知,應該可以重新組裝exe在運行時。我不想自己剝離exe。我正在尋找爲我做的C#例程。當然,我不想修改運行的exe文件,但它的副本。如果我需要在運行時重新編譯它,我也可以將它放在我的exe文件中。C# - 在運行時將文件作爲資源添加到我的exe中

我的目標:

  1. 創建運行EXE
  2. 的副本將文件添加到該副本莫名其妙
  3. 關閉正在運行的應用程序
  4. 當用戶執行副本時,它必須將文件作爲資源內部。而已。

編輯: C#編譯器+的Visual Studio 2010可在目標系統。


(我不是編程完整的安裝程序,請不要說那些不好的話:「重新發明」和「輪子」,我自己知道它們)

+1

爲什麼你想要這些長度只是爲了將文件嵌入到* runtime *的可執行文件中?我不知道「編寫一個完整的安裝程序」是如何幫助解決這個問題的,但是這樣做會顯着減少工作量,並且可能會比您建議的路線少得多。 – shambulator

+1

我不確定你在批評什麼。我需要找出最好的/最簡單的方法* *上面的東西*。據我所知,stackoverflow有很好的答案。 – Bitterblue

+0

我能想到的唯一的東西就是ildasm/ilasm。不愉快。但可能有API來做到這一點。試試看Mono,他們有一些很棒的工具和庫來支持他們自己的編譯器和IDE(MonoDevelop) –

回答

1

你就會有一個非常困難的時候修改資源部分的方式不會在沒有完整編譯器的情況下破壞您的可執行文件。

什麼,而不是,但是你可以做的是:

  • 製作(包含所有的文件或其他檔案)的ZIP文件
  • 做你的ZIP文件的內容的啞追加到尾部可執行
  • 還附加包含用戶檔案的長度INT32

您可以通過在爲自己的可執行文件開始開設FileStream閱讀和閱讀ZipLength字節 - 它給你只需要使用DotNetZip或其他庫讀取的zip部分。

然後,當你要修改的存儲的數據:

  • 重命名現有的可執行文件運行時(你可以做)
  • 閱讀第一ExecutableLength - ZipLength - 4字節的可執行文件,並將其寫入到一個新文件與您的可執行文件在重命名之前的名稱一致。
  • 用您的信息創建新的ZIP存檔並追加該信息。
  • 追加新檔案長度的int32。
  • 關閉現有應用程序並啓動新應用程序。

Tadah - 一個可以修改自己存儲資源的可執行文件。

+0

我不確定如果你說這不會幫助,但一個完整的編譯器可用。 – Bitterblue

+0

如果一個完整的編譯器可用,那麼你可以做奇怪的事情,比如將自己的源代碼的副本作爲資源包含並重建它。但這遠非一件微不足道的事情,而是要做到這一點 - 我給出的解決方案要簡單得多,而且工作量要少得多。 – PhonicUK

相關問題