web-dev-qa-db-ja.com

C#Windowsフォームアプリから.batファイルを実行する方法

ユーザーの要求に応じて、C#2005 GUIアプリで.batおよびいくつかのVBScriptファイルを呼び出す必要があります。これは休暇が終わるまでの一時的な解決策であり、すべてC#で記述できます。 VBScriptファイルを問題なく実行できますが、.batファイルを実行できません。 .batファイルを実行するためにC#アプリで「クリック」すると、DOSウィンドウが非常に速く開いて閉じ、テスト.batファイルが実行されません-「Windowsがbatを内部コマンドまたは外部コマンドとして認識しない」がエラーですDOSボックスに戻りました。 .batファイルをダブルクリックするか、コマンドプロンプトから手動で実行すると、実行されます。ユーザーの操作が必要でない限り、.batファイルもサイレントで実行する必要があります。このスクリプトは、ネットワークマシンのフォルダーに11k以上のファイルをコピーし、宛先がファイルまたはディレクトリの場合はWindowsが「忘れて」、ユーザーにそれを要求するそれが何であるか(これはここでの議論のためではない他の問題全体です...私がそれに悩まされていることは言うまでもありません)。

これまでのところ、私のC#ソースにはこれがあります:

Process scriptProc = new Process();


        if (File.Exists("c:\\scripts\\batchfile1.bat"))
        {

            scriptProc.StartInfo.FileName = @"cscript";
            scriptProc.StartInfo.Arguments = ("cmd.exe", "/C C:\\scripts\\batchfile1.bat"); // Wacky psuedo code //
            scriptProc.Start();
            scriptProc.WaitForExit(1500000);
            scriptProc.Close();

        }

        if (!File.Exists("c:\\scripts\\batchfile1.bat"))
        {
        }

私はこのコードが機能しないことを認識しています-しかし、それは本質的に私がそれをしたいことです。私が見ているのは、.batファイルのこのようなものです。 cmdを使用して.batを実行するようにシステムに指示する必要があると思います。これを行う方法について私は途方に暮れています。私はこれをチェックアウトしました サイト これはC#2003用です。C#は非常に環境に配慮しているため、あまり役に立ちません。

編集:ケビンの投稿を使用して、もう一度やりました。その投稿からの同じソリューションスクリプトですが、リダイレクトする必要がないため、私のために変更されました。

 System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo.FileName = "C:\\scripts\\batchfile1.bat";
            proc.StartInfo.RedirectStandardError = false;
            proc.StartInfo.RedirectStandardOutput = false;
            proc.StartInfo.UseShellExecute = false;
            proc.Start();
            proc.WaitForExit();
11
wergeld

ここにあなたが探しているものがあります:

バッチファイルを呼び出した後、サービスがWaitForExitでハングアップする

サービスがファイルを実行できない理由に関する質問ですが、実行に必要なすべてのコードが表示されます。

11
kemiller2002

宛先がフォルダーかファイルかをユーザーに尋ねるバッチファイルに関してあなたが抱えている問題について、事前に答えがわかっている場合は、次のようにすることができます。

宛先がファイルの場合:echo f | [バッチファイルパス]

フォルダーの場合:echo d | [バッチファイルパス]

基本的には、「エコー」の後の文字をバッチファイルの入力にパイプするだけです。

0
Anshul