なぜ私のProcess
が動作していないか、エラーを生成しない理由を理解できるように助けてくれるのだろうかと思います。c#System.Diagnostics.Processが何も実行していない、またはエラーをスローする
以下のコードは、ディレクトリをループし、sqb
という拡張子を持つすべてのファイルを検索し、各ファイルに対してサーバー上の特権を持つユーザーアカウントとしてProcess
を実行します。
このプロセスでは、たとえば、sqb2mtf.exe file.sqb file.bak
などの引数を持つファイルと同じフォルダから実行可能ファイルsqb2mtf.exe
を実行する必要があります。
Visual Studio 2013を使用してコードをステップ実行すると、各ファイルがループしていて、Process
が起動してもファイルは変換されず、変数readToEndError
にエラーも表示されません。私は私の心のうちつもりです
var directory = new DirectoryInfo(@"D:\inetpub\Import\");
foreach (var file in directory .EnumerateFiles("*.sqb"))
{
var convert = Path.GetFileNameWithoutExtension(file.ToString());
var process = new Process
{
StartInfo =
{
CreateNoWindow = true,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardInput = true,
RedirectStandardError = true,
FileName = @"D:\inetpub\Import\sqb2mtf.exe",
UserName = "myUserName",
Domain = "myDomain",
Password = GetSecureString("myPassword"),
Arguments = @"D:\inetpub\Import\" + file + " " + @"D:\inetpub\Import\" + convert + ".bak"
}
};
process.Start();
string readToEndOutput = process.StandardOutput.ReadToEnd();
string readToEndError = process.StandardError.ReadToEnd();
process.WaitForExit();
}
、これを解決するために何かアドバイスは非常に
:-)いただければ幸い更新
var directoryInfo = new DirectoryInfo(BackupDirectory);
foreach (var file in directoryInfo.EnumerateFiles("*.sqb"))
{
var convert = Path.GetFileNameWithoutExtension(file.ToString());
var fileName = BackupDirectory + "sqb2mtf.exe";
var arguments = "\"" + BackupDirectory + file + "\" \"" + BackupDirectory + convert + ".bak\"";
var process = new Process
{
StartInfo =
{
CreateNoWindow = true,
UseShellExecute = true,
RedirectStandardOutput = false,
RedirectStandardInput = false,
RedirectStandardError = false,
FileName = fileName,
Arguments = arguments
}
};
process.Start();
process.WaitForExit();
file.Delete();
}
一つInBetween
でのコメントから上の描画の事引用符の必要性です。この場合は、2つの別々のファイルを囲むために必要な引用符です。
このコードはIISExpressで動作することを確認できますが、残念ながらIIS 7.5ではなく、別のユーザーを偽装しています。
このコードをコンソールアプリケーションに移動し、問題のサーバーにインストールしてから、Windowsスケジュールタスクを使用して特定のアカウントとして実行することができました。
健全性チェック: 'cmd'からコマンドを実行すると機能しますか? 'stdout'も空ですか?プロセスは終了コード0などで復帰しますか?チェックアウトがすべてうまくいく場合は、 'UserName'、' Domain'、 'Password'などの問題があるはずです。 –
CreateNoWindow = falseを設定して、exeの実行時に何が起こるかを確認してください。それは、過去のフラッシュを見ることができるエラーまたはメッセージを投げている可能性があります。一度それを働かせたら、ウィンドウを隠すことができます。 –
CreateNoWindowをfalseに設定すると、ウィンドウが表示されません。ユーザー名のスペルを間違えた場合、「ログオンに失敗しました:不明なユーザー名またはパスワードが間違っています」というエラーが表示されるので、ドメイン、ユーザー名、およびパスワードが正しく機能しています。 – iggyweb