2017-07-13 81 views
1

我想將所有文件/資源​​嵌入到一個exe文件(2個exe文件和一個ps1文件)將所有文件嵌入到一個exe中

是否有可能?以及如何去做這件事,目前我已經成功發佈了該項目,但在輸出中還有其他文件(應用程序文件,應用程序清單和安裝程序exe) - 我想將其嵌入到單個exe中。

一直在做一些閱讀,似乎我可能需要嵌入資源,並可能創建指針?或在項目嵌入圖像資源,不知道如果我在正確的軌道和/或如何啓動代碼..

我有什麼到目前爲止

private Boolean Install_certificate() 
{ 
    try 
    { 
     var newProcessInfo = new System.Diagnostics.ProcessStartInfo() 
     { 
      FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe", 
      Verb = "runas", 
      Arguments = (@"–ExecutionPolicy Bypass ""script.ps1""") 

     }; 
     System.Diagnostics.Process.Start(newProcessInfo); 


     // Install the cert & change proxy settings 
     //System.Diagnostics.Process.Start(@"script.ps1"); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 
private Boolean Install_exe1() 
{ 
    try 
    { 
     // Install exe1 
     System.Diagnostics.Process.Start(@"setup1.exe"); 

     return true; 

    } 
    catch 
    { 
     return false; 
    } 
} 
private Boolean Install_exe2() 
{ 
    try 
    { 
     // Install exe2 
     System.Diagnostics.Process.Start(@"setup2.exe"); 
     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 

感謝幫助!

感謝

回答

1

您可以使用System.Diagnostics.Process啓動.exe文件。

您可以使用System.Management.Automation來運行Power Shell腳本。

如果你的前男友從命令提示符下它們的依賴工作。如果你想將這些文件嵌入到你的C#項目,你不應該在C#

一個問題,您可以add them as resources和你的程序運行的時候,你可以保存他們的二進制內容到exe文件,然後執行它們:

簡而言之,右鍵單擊您的項目,選擇屬性,然後單擊資源。點擊鏈接添加一個默認資源文件到你的項目中,

然後在資源設計器中選擇文件,然後添加資源並添加你想嵌入的文件。這將創建一個Resources文件,將文件嵌入其中,您可以從應用程序中以byte[]的身份訪問該文件。

enter image description here

然後,當你啓動應用程序將它們保存到磁盤並運行它們:

using System; 
using System.IO; 
using System.Diagnostics; 
namespace myNs 
{ 

    class Program 
    { 
     static void unpack() 
     { 
      if (!File.Exists("exe1.exe")) 
       File.WriteAllBytes("exe1.exe", myNs.Properties.Resources.exe1); 
      if (!File.Exists("exe2.exe")) 
       File.WriteAllBytes("exe2.exe", myNs.Properties.Resources.exe2); 
      if (!File.Exists("ps1.ps")) if (!File.Exists("ps1.ps")) 
        File.WriteAllBytes("ps1.ps", myNs.Properties.Resources.ps1); 
     } 
     static void Main(string[] args) 
     { 
      unpack(); 
      Process process = new Process(); 
      process.StartInfo.FileName = "exe1.exe"; 
      process.Start(); 
      process.WaitForExit(); 

      process = new Process(); 
      process.StartInfo.FileName = "exe2.exe"; 
      process.Start(); 
      process.WaitForExit(); 

      process = new Process(); 
      process.StartInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"; 
      process.StartInfo.Arguments = "ps1.ps1"; 
      process.Start(); 
      process.WaitForExit(); 
     } 
    } 
} 
+0

是的我正在使用System.Diagnostics.Process和System.Management.Automation,我的問題是關於編譯exe文件的+ powershell到一個單獨的exe文件,而沒有額外的文件。 – Hex02

+0

還有其他問題嗎?我回答了你如何完成它,併發布瞭如何使用代碼完成任務的鏈接。將不同的exe文件編譯成一個exe文件與執行單個exe文件不一樣。 –

+0

從一個exe執行它們 - 這是問題/任務 – Hex02

0

我的問題是關於編譯EXE的+ PowerShell中到一個單一的exe文件沒有其他文件

您可以將ps1腳本添加爲像Alexander Higgins所示的資源。

您可以使用Microsoft的工具ILMerge將2個程序集合並在一起。在這裏,我們合併Primary.dllSecondary.dll(等)到Merged.dll與log.txt出合併。

ilmerge /log:log.txt /out:Merged.dll Primary.dll Secondary.dll 

因爲EXE文件有你不能megre 2個EXE文件的入口點,來解決此簡單地改變EXE文件之一是一個DLL(類庫)。

+0

對不起,我不太瞭解你的建議,將更改EXE到DLL的用途是什麼? – Hex02

+0

閱讀我發佈的鏈接中的詳細信息部分*輸入部件列表中的第一部件是主部件。當主程序集是一個可執行文件時,目標程序集創建爲一個可執行文件,其入口點與主程序集相同。* - 換句話說,你不能有> 1個exe文件,因爲只有一個'Main() –