|
返信ありがとうございます。
>ところで、なぜ set を実行したいのでしょうか? 実は今回はC#で作成されたアプリケーションからコマンドを実行して、PCに任意のoracle製品がインストールされているかどうをチェックする モジュールを作成しようとしています。 そこで、コマンドラインを立ち上げてコマンドを実行する箇所がうまくいかないので質問させてください。
[実行コマンド] (1)ORACLE_HOMEの設定(このコマンドを実行しないと2つ目のコマンドが成功しません) C:\app\Administrator\product\11.2.0\client_1\OPatch>set ORACLE_HOME=C:\app\Administrator\product\11.2.0\client_1 (2)opatchの実行(oracle製品一覧を表示する処理です) C:\app\Administrator\product\11.2.0\client_1\OPatch>opatch lsinventory -detail 2つ目のコマンドを実行すると、PCにインストールされている全てのoracle製品がコマンドライン上に表示されます。 ※今回はORACLE_HOMEにC:\app\Administrator\product\11.2.0\client_1を設定しています。 [C#ソース] System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(); psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec"); psi.RedirectStandardInput = false; psi.RedirectStandardOutput = true; psi.UseShellExecute = false; psi.CreateNoWindow = true; psi.WorkingDirectory = @"c:\app\Administrator\product\11.2.0\client_1\OPatch";//実行ディレクトリの設定 string[] strCmds = { @"/c set ORACLE_HOME=c:\app\Administrator\product\11.2.0\client_1", @"/c opatch lsinventory -detail" }; for (int i=0;i<strCmds.Length;i++) { psi.Arguments = strCmds[i]; System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi); results = p.StandardOutput.ReadToEnd(); p.WaitForExit(); Console.WriteLine("results=" + results); } [C#実行結果] results= results=Oracle Home is not set. OPatch cannot proceed! OPatch failed with error code = 1 [問題] 1つ目のコマンドでORACLE_HOMEを設定しているにも関わらず、2つ目のコマンドでoracle製品の一覧が表示されません。 1つ目のコマンドで設定した情報が引き継がれていないためでしょうか。 [質問] コマンドライン上でコマンドを連続して実行したい際に、上記[C#のソース]のような処理で可能でしょうか。 また、何か良い方法があったら教えて頂けないでしょうか。 今回は情報が不十分で申し訳ございませんでした。setコマンドは単体で実行した際、うまくいくことを確認しました。 宜しくお願いします。
|