我想从另一个实用程序应用程序启动我的应用程序并传递参数。最简单的解决方案:
System.Diagnostics.Process.Start(appPath, param);
...不是一个选项,因为我想阻止其他人向应用提供参数。换句话说:我想从我的实用程序应用程序中使用param 来启动我的应用程序。
如何实现?
谢谢, 莱谢克
答案 0 :(得分:2)
如果您(出于安全原因)不想传递有意义的参数来启动主程序,那么您可以使用匿名管道(从Net 4开始)
基本上你遵循这个伪代码
Here you can find a detailed example
通过这种方式,有一个参数从实用程序传递到代表匿名管道的主程序,但没有其他程序或用户可以轻易伪造主程序。如果您在这个场景中添加两种程序之间的某种形式的秘密握手,您将获得强大的保护。
答案 1 :(得分:1)
如果我理解正确,你希望这个过程如下:
并且您希望确保没有其他人可以在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来主要应用程序的人。我可以在发布版本中删除此功能。