- - PR -
C#でバッチファイルをPROCESSを使用し実行
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-09-21 02:09
【環境】
・2003server sp1 ・.NET 2003 ・IIS 6.0 【バッチファイルの中身】 (複数ユーザーのプロファイル情報用のフォルダ作成とアクセス権限の変更) md \\サーバー名\Profile\ユーザー名 XCACLS \\サーバー名\Profile\ユーザー名 ユーザー名:F 以下Aの通りに上記バッチを起動しましたが、 処理が途中で必ず止まってしまいます。 ただし@の状況があります。 1番考えられるのが環境(セキュリティ)の問題だとおもっているのですが、 どのセキュリティ(ローカルセキュリティポリシー?)なのか検討がつきません。 どなたかヒント等ご教授願いませんでしょうか? ※ソースに問題があるかもしれませんが… @状況 ・複数ユーザー(40ユーザー)に対するバッチ処理を行うと途中で処理が止まり、 タスクマネージャーでみると、CMD.EXEとXCACLS.EXEが"NETWORK SERVICE"で起動されたままとなっている。 ・別の2003SERVERでは正常に処理されました。 ・1ユーザーに対してのバッチは.NETからの起動で正常に処理されます。 ・バッチを手動(エクスプローラよりバッチファイルをダブルクリック) で起動すると正常に処理されます。 Aソース /**********************************************************************/ /* メソッド名称 : コマンド発行 */ /* メソッドID : setCmdIssue */ /* 処理概要 : コマンドプロンプトよりコマンドラインを実行します */ /* 引数 : コマンドライン文字列 */ /* 戻り値 : コンディションコード */ /* 列外 : − */ /* 参照クラス : − */ /**********************************************************************/ /// <summary> /// コマンドプロンプトよりコマンドラインを実行します /// </summary> /// <param name="argStr">コマンドライン文字列</param> /// <returns>コンディションコード</returns> protected int setCmdIssue(string argStr) { int iReturn = -2; Process p = null; System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(); //ComSpecのパスを取得する psi.FileName = "C:\\WINDOWS\\system32\\cmd.exe"; //出力を読み取れるようにする psi.RedirectStandardInput = false; psi.RedirectStandardOutput = true; psi.UseShellExecute = false; //ウィンドウを表示しないようにする psi.CreateNoWindow = true; //コマンドラインを指定("/c"は実行後閉じるために必要) psi.Arguments = "/c " + argStr; ↑argStrに処理するバッチファイルのパスが格納されている。 try { //起動 p = Process.Start(psi); //WaitForExitはReadToEndの後である必要がある //(親プロセス、子プロセスでブロック防止のため) p.WaitForExit(); //コンディションコードを返す iReturn = p.ExitCode; } catch (Exception eErr) { throw eErr; } finally { p.Close(); p.Dispose(); } return iReturn; } [ メッセージ編集済み 編集者: kirua 編集日時 2006-09-21 02:11 ] [ メッセージ編集済み 編集者: kirua 編集日時 2006-09-21 02:12 ] | ||||
|
投稿日時: 2006-09-21 06:23
xcaclsがコンソールに何らかのエラーを表示している可能性が高いと思うのですが・・・何も表示されていませんか? もしコードを疑っているなら、最低限宣言部分も記載してくださいな。 | ||||
|
投稿日時: 2006-09-23 23:56
甕星さんレスありがとうございます。
xcaclsではエラー出力していないはずです。 xcaclsのコマンドを発行する際にエラーを出力するようリダイレクトを入れているので、そのログにエラーは出力されません。 ※【エラーを出力するリダイレクト】xcacls パス名 2>c:\xcacls.log そこで質問なのですが、ECHO OFFにしないと、 必ずバッチファイルがフリーズしてしまう。 ECHO ONのままフリーズせずにバッチファイルを起動する方法は あるのでしょうか?(メモリーがオーバーフローを起しフリーズ?) |
1