将参数传递给EXE程序集

时间:2012-12-11 20:33:11

标签: c#

我想从另一个实用程序应用程序启动我的应用程序并传递参数。最简单的解决方案:

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

...不是一个选项,因为我想阻止其他人向应用提供参数。换句话说:我想从我的实用程序应用程序中使用param 来启动我的应用程序。

如何实现?

谢谢, 莱谢克

4 个答案:

答案 0 :(得分:2)

如果您(出于安全原因)不想传递有意义的参数来启动主程序,那么您可以使用匿名管道(从Net 4开始)
基本上你遵循这个伪代码

  • 从该实用程序中,创建匿名管道并启动传递管道句柄的主程序。
  • 主程序使用传递的句柄来监听匿名管道
  • 实用程序使用匿名管道发送消息

Here you can find a detailed example

通过这种方式,有一个参数从实用程序传递到代表匿名管道的主程序,但没有其他程序或用户可以轻易伪造主程序。如果您在这个场景中添加两种程序之间的某种形式的秘密握手,您将获得强大的保护。

答案 1 :(得分:1)

如果我理解正确,你希望这个过程如下:

  1. 启动UtilityProgram.exe
  2. 在UtilityProgram中执行启动YourApplication.exe的操作
  3. 并且您希望确保没有其他人可以在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();
    

答案 2 :(得分:1)

您可以将应用的某个参数设为您只知道的密码。然后你可以从启动utiliy传递该参数。

答案 3 :(得分:0)

我想到的另一个选择是仅在Debug构建中接受参数。我可以控制这两个应用程序,而且我是唯一一个需要用param来主要应用程序的人。我可以在发布版本中删除此功能。