2012-12-11 183 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激活主应用程序的人。我可以在发布版本中关闭此功能。