我想從另一個實用程序應用程序啓動我的應用程序並傳遞一個參數。最簡單的解決方案:將參數傳遞給EXE程序集
System.Diagnostics.Process.Start(appPath, param);
...不是一個選項,因爲我想阻止其他人將參數提供給應用程序。換句話說:我想從我的實用程序應用程序發送一個參數只有。
如何做到這一點?
感謝, 萊謝克
我想從另一個實用程序應用程序啓動我的應用程序並傳遞一個參數。最簡單的解決方案:將參數傳遞給EXE程序集
System.Diagnostics.Process.Start(appPath, param);
...不是一個選項,因爲我想阻止其他人將參數提供給應用程序。換句話說:我想從我的實用程序應用程序發送一個參數只有。
如何做到這一點?
感謝, 萊謝克
如果我理解正確的,你想的過程是這樣的:
而您想確保其他人不能在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();
只需啓動['Process Explorer'](http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)並查看參數 –
@LB謝謝,這是一個很好的觀點,完全正確。這取決於OP想要去的安全程度,以及目標受衆的技術精湛程度。 –
我實際上*希望*用戶在Utility程序之外啓動我的應用程序。我不希望他們提供任何參數。密碼是一個可行的選擇。 – Leszek
可以使一個你應用程序的參數是您只知道的密碼。然後,您可以從啓動utiliy傳遞該參數。
不是一個壞主意 - 如果沒有過度的安全問題,這是可行的。當然,孩子們會玩RedGate的Reflector或類似的工具,並反編譯.exe並獲得「祕密」密碼,所以如果存在安全問題,這將不是一個很好的解決方案。 – David
這是非常可行的我已經做了類似的東西,並將密碼存儲在.config文件中作爲加密的字符串和代碼中,並編寫了加密代碼來檢查通過加密密碼傳遞的密碼。 – MethodMan
只需啓動['Process Explorer '](http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)並參見參數 –
如果你(出於安全原因)不希望通過有意義的參數來啓動你的主程序,那麼你可以使用匿名管道
(淨額4起)基本上,你按照這個僞
Here you can find a detailed example
通過這種方式發送的消息,則是從傳遞參數該實用程序代表匿名管道的主程序,但沒有其他程序或用戶可以輕易僞造主程序。如果您在這種情況下添加了兩種程序之間的某種形式的祕密握手,您將獲得強大的保護。
我想到的另一個選擇是僅接受Debug構建中的參數。我對兩個應用程序都有控制權,而且我是唯一一個需要用param激活主應用程序的人。我可以在發佈版本中關閉此功能。
我不認爲你所要求的是可能的,儘管你可以通過默默無聞來達到一定程度的安全性。 – Douglas
所以你想讓一個可執行文件不可執行到除你的應用以外的任何東西,是嗎? – David
這是什麼原因?我可以考慮一些解決方案,但知道你爲什麼這樣做會有所幫助。 –