4

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

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

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

如何做到这一点?

谢谢, 莱斯泽克

4

4 回答 4

2

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

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

在这里你可以找到一个详细的例子

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

于 2012-12-11T20:43:48.910 回答
1

如果我理解正确,您希望该过程如下所示:

  1. 启动 UtilityProgram.exe
  2. 在启动 YourApplication.exe 的 UtilityProgram 中执行某些操作

并且您要确保没有其他人可以在 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();
于 2012-12-11T20:38:45.047 回答
1

您可以将应用程序的参数之一设置为您只知道的密码。然后您可以从启动实用程序传递该参数。

于 2012-12-11T20:40:16.700 回答
0

我想到的另一个选择是仅在 Debug 构建中接受参数。我可以控制这两个应用程序,并且我是唯一需要使用参数启动主应用程序的人。我可以在发布版本中去掉这个功能。

于 2012-12-11T22:07:42.007 回答