別のユーティリティ アプリからアプリケーションを起動し、パラメーターを渡したいです。最も簡単な解決策:
System.Diagnostics.Process.Start(appPath, param);
...他の人がアプリにパラメーターを提供できないようにしたいので、オプションではありません。つまり、ユーティリティ アプリからのみパラメーターを指定してアプリケーションを起動したいと考えています。
それを達成する方法は?
ありがとう、レシェク
別のユーティリティ アプリからアプリケーションを起動し、パラメーターを渡したいです。最も簡単な解決策:
System.Diagnostics.Process.Start(appPath, param);
...他の人がアプリにパラメーターを提供できないようにしたいので、オプションではありません。つまり、ユーティリティ アプリからのみパラメーターを指定してアプリケーションを起動したいと考えています。
それを達成する方法は?
ありがとう、レシェク
(セキュリティ上の理由から) メイン プログラムを開始するために意味のあるパラメーターを渡したくない場合は、匿名パイプ (Net 4 以降) を使用できます。
基本的には、この疑似コードに従います。
このように、匿名パイプを表すパラメーターがユーティリティからメイン プログラムに渡されますが、他のプログラムやユーザーはメイン プログラムを簡単に偽造することはできません。このシナリオに、2 つのプログラム間の何らかの形式の秘密のハンドシェークも追加すると、堅牢な保護が得られます。
私が正しく理解している場合、プロセスを次のように進めたいと考えています。
また、誰も 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 つを、自分だけが知っているパスワードにすることができます。次に、起動ユーティリティからそのパラメーターを渡すことができます。
私の頭に浮かんだ別のオプションは、デバッグ ビルドでのみパラメーターを受け入れることです。私は両方のアプリケーションを制御しており、パラメーターを使用してメイン アプリケーションを起動する必要があるのは私だけです。リリース ビルドでこの機能を取り除くことができます。