3

次のコードを使用して、サーバーとの timesync を行うために、数秒ごとに 1 つのバッチ ファイルを実行しています。

Process process = new Process();

process.StartInfo.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.System);

process.StartInfo.FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "cmd.exe");
process.StartInfo.Arguments = @"/C C:\TimeSync.bat";
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.UserName = "username";

SecureString pwd = new SecureString();

Char[] pwdCharacters = "password".ToCharArray();
foreach (char t in pwdCharacters)
{
    pwd.AppendChar(t);
}

process.StartInfo.Password = pwd;

process.Start();
string output = process.StandardOutput.ReadToEnd();

問題は、私が望まない画面上のコマンド ウィンドウを点滅させることです。どうすればそれを防ぐことができますか?

私が見た動作の 1 つは、同じコードを実行し、UseShellExecute = trueユーザー名とパスワードを指定しないと、コマンド ウィンドウが点滅しないことです。

したがって、基本的には、C#コードを別のユーザーとしてサイレントに使用して.batファイルを実行したいと考えています。

4

4 に答える 4

1

ユーザー名とパスワードを渡すため、CreateNoWindow パラメーターは考慮されません。これは Windows の機能 (バグ) です。5 年前の接続の詳細は次のとおりです。

http://connect.microsoft.com/VisualStudio/feedback/details/98476/cmd-windows-shows-using-process-with-createnowindow-when-using-username-password-option

Process.Start() は、ユーザーがユーザー名とパスワードを入力した場合に advapi32.dll の CreateProcessWithLogonW を呼び出し、CreateProcessWithLogonW は常に新しいウィンドウを開きます。残念ながら、この動作に対する回避策はありません

ウィンドウを作成しないオプションの優れた概要は、http: //blogs.msdn.com/b/jmstall/archive/2006/09/28/createnowindow.aspx にあります。これは、このトピックに関する msdn ドキュメントのエラーも指摘しています。 .

そして、このstackoverflowの回答には非常に優れた概要があります: How to hide cmd window while running a batch file?

最後に、エスカレートされたユーザーとして、1 回だけ呼び出す別の小さなアプリを作成したいと思います。その後、上で説明したのと同じ方法で、ユーザー名とパスワードを指定することなく、必要な回数だけ時刻同期を実行できます。したがって、アプリケーションの全期間中、コンソール ウィンドウの「フラッシュ」は 1 回だけです。

これがlbに役立つことを願っています

于 2011-01-23T11:25:03.720 に答える
1

行を変更します。

process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;

 process.StartInfo.WindowStyle =
 ProcessWindowStyle.Hidden;

これにより、ウィンドウが非表示になり、表示されなくなります。

それが役立つことを願っています!

フィル

于 2011-03-09T10:33:02.527 に答える
0

次のように指定しようとしましたか?

process.StartInfo.CreateNoWindow=true;

于 2011-01-10T19:44:28.987 に答える
0

なりすましを使用できます。私は、インターフェースを実装し、使用するのがかなり簡単ななりすましクラスを作成しました。IDisposable

于 2011-01-10T19:45:02.453 に答える