C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

C#から外部バッチファイルを実行させるときのエラー

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■103672 / inTopicNo.1)  C#から外部バッチファイルを実行させるときのエラー
  
□投稿者/ inak (1回)-(2025/05/14(Wed) 16:46:46)

分類:[C#] 

いつも参考にさせていただいております。

今回、C#でちょっと行き詰っている点があり、質問させてもらうことにしました。

Visual Studio 2022
.NET 8.0
C#
Windows11

C#アプリケーションから外部プログラム(バッチファイル)を実行させようとしていて、以下のように記述しています。

string exeBatchFile = AppDomain.CurrentDomain.BaseDirectory + @"run.bat";

ProcessStartInfo pInfo = new()
{
FileName = exeBatchFile,
CreateNoWindow = true,
UseShellExecute = true,
};

Process p = Process.Start(pInfo);
p.WaitForExit();

バッチファイルの中身はこんな感じです。

C:
cd C:\temp\test
cal_program.exe

Fortranで作成されたDOS版の古いプログラム "cal_program.exe" が存在しているフォルダーに移ってから実行させるようにしています。

このコードを実行すると「System.ComponentModel.Win32Exception」「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」というエラーが発生します。メッセージを見るとバッチファイルが別プロセスで使用中というメッセージみたいで、バッチファイルも中身の記述が消えてファイルサイズがゼロになってしまっています。

いろいろと試しているのですが、どうも原因がわかりません。何かヒントでもわかる方がおられましたら、ご教示ください。よろしくお願いします。
引用返信 編集キー/
■103673 / inTopicNo.2)  Re[1]: C#から外部バッチファイルを実行させるときのエラー
□投稿者/ 魔界の仮面弁士 (3845回)-(2025/05/14(Wed) 18:16:17)
No103672 (inak さん) に返信
> string exeBatchFile = AppDomain.CurrentDomain.BaseDirectory + @"run.bat";
このパスが正しいことは確認済みでしょうか?
(上記が、実行ファイルのフォルダーを指すとは限らないそうで)
https://dobon.net/vb/dotnet/vb6/apppath.html

> C:
> cd C:\temp\test
CD /D C:\temp\test
と 1 行にまとめることもできますね。

> cal_program.exe
> Fortranで作成されたDOS版の古いプログラム "cal_program.exe" が存在しているフォルダーに移ってから実行させるようにしています。
古いプログラムなら、32bit プロセスであることを前提にしていそうに思いますが、
そのバッチファイルは、32bit プロセスと 64bit プロセスのどちらで実行させていますか?
環境変数「PROCESSOR_ARCHITECTURE」と「PROCESSOR_ARCHITEW6432」の値を確認してみてはいかがでしょう。

> このコードを実行すると「System.ComponentModel.Win32Exception」「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」というエラーが発生します。
> メッセージを見るとバッチファイルが別プロセスで使用中というメッセージみたいで、バッチファイルも中身の記述が消えてファイルサイズがゼロになってしまっています。
UAC によるフォルダー仮想化の影響を受けていないでしょうか。
C# アプリを管理者モードで実行した場合とそうでない場合とで、動作が変化しますか?

> いろいろと試しているのですが、どうも原因がわかりません。
Process Monitor でレジストリ / ファイルへのアクセス状況を追跡できないでしょうか。
引用返信 編集キー/
■103686 / inTopicNo.3)  Re[2]: C#から外部バッチファイルを実行させるときのエラー
□投稿者/ PATIO (15回)-(2025/05/23(Fri) 10:28:39)
No103673 (魔界の仮面弁士 さん) に返信
> ■No103672 (inak さん) に返信
>> string exeBatchFile = AppDomain.CurrentDomain.BaseDirectory + @"run.bat";
> このパスが正しいことは確認済みでしょうか?
> (上記が、実行ファイルのフォルダーを指すとは限らないそうで)
> https://dobon.net/vb/dotnet/vb6/apppath.html
>
>> C:
>> cd C:\temp\test
> CD /D C:\temp\test
> と 1 行にまとめることもできますね。
>
>> cal_program.exe
>>Fortranで作成されたDOS版の古いプログラム "cal_program.exe" が存在しているフォルダーに移ってから実行させるようにしています。
> 古いプログラムなら、32bit プロセスであることを前提にしていそうに思いますが、
> そのバッチファイルは、32bit プロセスと 64bit プロセスのどちらで実行させていますか?
> 環境変数「PROCESSOR_ARCHITECTURE」と「PROCESSOR_ARCHITEW6432」の値を確認してみてはいかがでしょう。
>
>>このコードを実行すると「System.ComponentModel.Win32Exception」「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」というエラーが発生します。
>>メッセージを見るとバッチファイルが別プロセスで使用中というメッセージみたいで、バッチファイルも中身の記述が消えてファイルサイズがゼロになってしまっています。
> UAC によるフォルダー仮想化の影響を受けていないでしょうか。
> C# アプリを管理者モードで実行した場合とそうでない場合とで、動作が変化しますか?
>
>>いろいろと試しているのですが、どうも原因がわかりません。
> Process Monitor でレジストリ / ファイルへのアクセス状況を追跡できないでしょうか。
引用返信 編集キー/
■103688 / inTopicNo.4)  Re[2]: C#から外部バッチファイルを実行させるときのエラー
□投稿者/ PATIO (16回)-(2025/05/23(Fri) 11:31:42)
すいません。
うっかりコメントを追加する前にEnterしてしまいました。

下記の部分が気になっています。
「バッチファイルも中身の記述が消えてファイルサイズがゼロになってしまっています。」
もしかしてですが、セキュリティ系のソフトに引っかかっていたりしないでしょうか?
某セキュリティソフトでEXCELのVBAからWindowsタスクスケジューラーの操作をしていた時に
ワームとご認識されてブロックされた上にEXCELファイルを消されたことがあります。


No103673 (魔界の仮面弁士 さん) に返信
> ■No103672 (inak さん) に返信
>> string exeBatchFile = AppDomain.CurrentDomain.BaseDirectory + @"run.bat";
> このパスが正しいことは確認済みでしょうか?
> (上記が、実行ファイルのフォルダーを指すとは限らないそうで)
> https://dobon.net/vb/dotnet/vb6/apppath.html
>
>> C:
>> cd C:\temp\test
> CD /D C:\temp\test
> と 1 行にまとめることもできますね。
>
>> cal_program.exe
>>Fortranで作成されたDOS版の古いプログラム "cal_program.exe" が存在しているフォルダーに移ってから実行させるようにしています。
> 古いプログラムなら、32bit プロセスであることを前提にしていそうに思いますが、
> そのバッチファイルは、32bit プロセスと 64bit プロセスのどちらで実行させていますか?
> 環境変数「PROCESSOR_ARCHITECTURE」と「PROCESSOR_ARCHITEW6432」の値を確認してみてはいかがでしょう。
>
>>このコードを実行すると「System.ComponentModel.Win32Exception」「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」というエラーが発生します。
>>メッセージを見るとバッチファイルが別プロセスで使用中というメッセージみたいで、バッチファイルも中身の記述が消えてファイルサイズがゼロになってしまっています。
> UAC によるフォルダー仮想化の影響を受けていないでしょうか。
> C# アプリを管理者モードで実行した場合とそうでない場合とで、動作が変化しますか?
>
>>いろいろと試しているのですが、どうも原因がわかりません。
> Process Monitor でレジストリ / ファイルへのアクセス状況を追跡できないでしょうか。
引用返信 編集キー/
■103693 / inTopicNo.5)  Re[3]: C#から外部バッチファイルを実行させるときのエラー
□投稿者/ PATIO (19回)-(2025/05/26(Mon) 09:45:20)
あーっ、誤変換。

> 某セキュリティソフトでEXCELのVBAからWindowsタスクスケジューラーの操作をしていた時に
> ワームとご認識されてブロックされた上にEXCELファイルを消されたことがあります。

正しくは、
ワームと誤認識されてブロックされた上にEXCELファイルを消されたことがあります。

この時は、修正した内容を保存していなかったので真っ白になりました。
幸い、一つ前の版が残っていたので半日分の手戻りくらいで何とかなりましたが。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ