2012-12-11 214 views
4

我想從另一個實用程序應用程序啓動我的應用程序並傳遞一個參數。最簡單的解決方案:將參數傳遞給EXE程序集

System.Diagnostics.Process.Start(appPath, param); 

...不是一個選項,因爲我想阻止其他人將參數提供給應用程序。換句話說:我想從我的實用程序應用程序發送一個參數只有

如何做到這一點?

感謝, 萊謝克

+3

我不認爲你所要求的是可能的,儘管你可以通過默默無聞來達到一定程度的安全性。 – Douglas

+0

所以你想讓一個可執行文件不可執行到除你的應用以外的任何東西,是嗎? – David

+2

這是什麼原因?我可以考慮一些解決方案,但知道你爲什麼這樣做會有所幫助。 –

回答

1

如果我理解正確的,你想的過程是這樣的:

  1. 開始UtilityProgram.exe
  2. 不要在UtilityProgram的東西,開始YourApplication.exe

而您想確保其他人不能在UtilityProgram之外啓動YourApplication.exe。

我認爲最簡單的方法是要求YourApplication.exe中的參數很複雜,有點像密碼。

所以,在YourApplication.exe,你的代碼看起來是這樣的:

static int Main(string[] args){ 
    if (args.Length != 1) { 
     // We got more than 1 parameter, exiting with a code of -1. 
     return -1; 
    } 

    if (args[0] != "abc123def456ghi") { 
     // We got 1 parameter, but it wasn't right, exiting with a code of -2. 
     return -2; 
    } 

    // Got 1 matching parameter 
    // Code goes here 
} 

然後在UtilityProgram.exe,你可以這樣做:

Process MyApp = new Process(); 
MyApp.StartInfo.FileName = @"C:\path\to\MyApp\exe"; 
MyApp.StartInfo.Arguments = "abc123def456ghi"; 
MyApp.Start(); 
+1

只需啓動['Process Explorer'](http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)並查看參數 –

+0

@LB謝謝,這是一個很好的觀點,完全正確。這取決於OP想要去的安全程度,以及目標受衆的技術精湛程度。 –

+0

我實際上*希望*用戶在Utility程序之外啓動我的應用程序。我不希望他們提供任何參數。密碼是一個可行的選擇。 – Leszek

1

可以使一個你應用程序的參數是您只知道的密碼。然後,您可以從啓動utiliy傳遞該參數。

+0

不是一個壞主意 - 如果沒有過度的安全問題,這是可行的。當然,孩子們會玩RedGate的Reflector或類似的工具,並反編譯.exe並獲得「祕密」密碼,所以如果存在安全問題,這將不是一個很好的解決方案。 – David

+3

這是非常可行的我已經做了類似的東西,並將密碼存儲在.config文件中作爲加密的字符串和代碼中,並編寫了加密代碼來檢查通過加密密碼傳遞的密碼。 – MethodMan

+0

只需啓動['Process Explorer '](http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)並參見參數 –

2

如果你(出於安全原因)不希望通過有意義的參數來啓動你的主程序,那麼你可以使用匿名管道
(淨額4起)基本上,你按照這個僞

  • 從該實用程序創建匿名管道並啓動傳遞管道句柄的主程序。
  • 主程序使用傳遞給聽的匿名管道
  • 該實用程序的手柄使用匿名管道

Here you can find a detailed example

通過這種方式發送的消息,則是從傳遞參數該實用程序代表匿名管道的主程序,但沒有其他程序或用戶可以輕易僞造主程序。如果您在這種情況下添加了兩種程序之間的某種形式的祕密握手,您將獲得強大的保護。

+0

我正在使用.NET 3.5,但Anonymous Pipes聽起來很有趣。 – Leszek

+0

我不知道你的代碼,但這似乎是一個很好的參數升級到4或4.5 – Steve

0

我想到的另一個選擇是僅接受Debug構建中的參數。我對兩個應用程序都有控制權,而且我是唯一一個需要用param激活主應用程序的人。我可以在發佈版本中關閉此功能。