我想从另一个实用程序应用程序启动我的应用程序并传递一个参数。最简单的解决方案:将参数传递给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
这是什么原因?我可以考虑一些解决方案,但知道你为什么这样做会有所帮助。 –