7

プロジェクト

このプロジェクトは、テスト自動化に使用される大規模なC#プロジェクトです。この目的のために、すべての結果をテスト環境にロードできるファイルに保存するツールであるjava-toolを使用する必要があります。

インターフェース

C ++でビルドされたtest-environmentのベンダーからDLLを入手しました。このdllは、Java環境をロードし、jarファイルをロードします。

現在の状況

Java環境は正常にロードされ、次のメソッドを使用してC#で設定された環境変数で構成されます。

String java = GetJavaInstallationPath();
Environment.SetEnvironmentVariable("PATH", String.Format("{0};{1}", Environment.GetEnvironmentVariable("PATH"), Path.Combine(java, @"bin\client")), EnvironmentVariableTarget.Process);

この後、次のコードを使用してJavaクラスへのパスを設定します。

Environment.SetEnvironmentVariable("ITEPCLASSPATH",
                String.Format("{0};{1}",
                Path.Combine(iTepPath, "itep.jar"),
                Path.Combine(iTepPath, "libs\\itorx.jar")), EnvironmentVariableTarget.Process);

これは実際に機能するはずですが、使用すると正しい値が表示されますEnvironment.GetEnvironmentVariable("ITEPCLASSPATH")が、C++-DLLは機能していないことを示しています。

外部のbatファイルを使用してクラスパスを設定すると、機能します。さらにいくつかの事実:

  • アプリケーションはbatファイルによって開始されます
  • パスは、生成されたdllのパスからコピーされます
  • 私は何もコメントしないので、パスはまだC#によって設定されています

javaはC#で設定した環境変数にアクセスしていないようですが、batファイルで設定したことを認識しています。

本当にC#で変数を設定する必要がありますが、これをアーカイブするにはどうすればよいですか?

4

3 に答える 3

1

Microsoft System.Environmentのドキュメントには明示的に記述されていませんが、ターゲット値Processはスコープを現在のプロセスのみに制限しているようです。デフォルトでは、CreateProcessメソッドは子プロセスの現在のプロセス環境を継承します。たぶん、そこで使用されるパラメータは、このデフォルトの動作を壊します。

ですから、最初にEnvironmentVariableTarget.Userinでテストして、SetEnvironmentVariableうまく機能するかどうかを確認することをお勧めします。

ちなみに、さらに環境変数を診断し、ProcessMonitorのようなツールでプロセス操作を作成する必要があると思います

于 2012-05-14T20:12:13.190 に答える
1

環境変数が各ターゲット(プロセス、ユーザー、マシン)で機能することを確認してください。このMSDNの記事を参照してください。

// Set the environment variable for the default target (the current process).
Console.WriteLine(fmt2x, "(default)", myVarA, existsA);
Environment.SetEnvironmentVariable(myVarA, existsA);

// Set the environment variable for the the current process.
Console.WriteLine(fmt2x, "Process", myVarB, existsB);
Environment.SetEnvironmentVariable(myVarB, existsB, 
    EnvironmentVariableTarget.Process);

// Set the environment variable for the the current user.
Console.WriteLine(fmt2x, "User", myVarC, existsC);
Environment.SetEnvironmentVariable(myVarC, existsC, 
    EnvironmentVariableTarget.User);

// Set the environment variable for the the local machine.
Console.WriteLine(fmt2x, "Machine", myVarD, existsD);
Environment.SetEnvironmentVariable(myVarD, existsD, 
    EnvironmentVariableTarget.Machine);
于 2012-05-15T00:25:30.253 に答える
0

Javaでは、以下を使用して環境変数をパラメーターとして渡すことができます。

java -DMYPROP=MYVALUE myclass.class

引数の構文。-Dフラグを確認してください。

これらのシステムプロパティは、そのJVMプロセスインスタンスに適用されます。OS環境を変更するよりも簡単ではないでしょうか。

于 2012-05-15T17:18:53.060 に答える