- PR -

C#でバッチファイルをPROCESSを使用し実行

1
投稿者投稿内容
kirua
常連さん
会議室デビュー日: 2006/05/30
投稿数: 31
投稿日時: 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 ]
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-09-21 06:23
引用:

kiruaさんの書き込み (2006-09-21 02:09) より:
1番考えられるのが環境(セキュリティ)の問題だとおもっているのですが、
どのセキュリティ(ローカルセキュリティポリシー?)なのか検討がつきません。
どなたかヒント等ご教授願いませんでしょうか?
※ソースに問題があるかもしれませんが…


xcaclsがコンソールに何らかのエラーを表示している可能性が高いと思うのですが・・・何も表示されていませんか?

もしコードを疑っているなら、最低限宣言部分も記載してくださいな。
kirua
常連さん
会議室デビュー日: 2006/05/30
投稿数: 31
投稿日時: 2006-09-23 23:56
甕星さんレスありがとうございます。

xcaclsではエラー出力していないはずです。
xcaclsのコマンドを発行する際にエラーを出力するようリダイレクトを入れているので、そのログにエラーは出力されません。
※【エラーを出力するリダイレクト】xcacls パス名 2>c:\xcacls.log

そこで質問なのですが、ECHO OFFにしないと、
必ずバッチファイルがフリーズしてしまう。
ECHO ONのままフリーズせずにバッチファイルを起動する方法は
あるのでしょうか?(メモリーがオーバーフローを起しフリーズ?)
1

スキルアップ/キャリアアップ(JOB@IT)