4

別のユーティリティ アプリからアプリケーションを起動し、パラメーターを渡したいです。最も簡単な解決策:

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

...他の人がアプリにパラメーターを提供できないようにしたいので、オプションではありません。つまり、ユーティリティ アプリからのパラメーターを指定してアプリケーションを起動したいと考えています。

それを達成する方法は?

ありがとう、レシェク

4

4 に答える 4

2

(セキュリティ上の理由から) メイン プログラムを開始するために意味のあるパラメーターを渡したくない場合は、匿名パイプ (Net 4 以降) を使用できます。
基本的には、この疑似コードに従います。

  • ユーティリティから匿名パイプを作成し、パイプのハンドルを渡してメイン プログラムを開始します。
  • メイン プログラムは、渡されたハンドルを使用して匿名パイプをリッスンします。
  • ユーティリティ プログラムは匿名パイプを使用してメッセージを送信します

ここで詳細な例を見つけることができます

このように、匿名パイプを表すパラメーターがユーティリティからメイン プログラムに渡されますが、他のプログラムやユーザーはメイン プログラムを簡単に偽造することはできません。このシナリオに、2 つのプログラム間の何らかの形式の秘密のハンドシェークも追加すると、堅牢な保護が得られます。

于 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

アプリのパラメーターの 1 つを、自分だけが知っているパスワードにすることができます。次に、起動ユーティリティからそのパラメーターを渡すことができます。

于 2012-12-11T20:40:16.700 に答える
0

私の頭に浮かんだ別のオプションは、デバッグ ビルドでのみパラメーターを受け入れることです。私は両方のアプリケーションを制御しており、パラメーターを使用してメイン アプリケーションを起動する必要があるのは私だけです。リリース ビルドでこの機能を取り除くことができます。

于 2012-12-11T22:07:42.007 に答える