我不知道是否有人可以請幫我理解爲什麼我的Process
不工作,也不會產生錯誤。c#System.Diagnostics.Process不會做任何事情或拋出錯
下面的代碼應循環遍歷一個目錄,找到擴展名爲sqb
的所有文件,並將每個文件運行Process
作爲在服務器上具有較高特權的用戶帳戶。
出於示例目的,該過程應該從與文件所在的文件夾相同的文件夾運行可執行文件sqb2mtf.exe
,例如sqb2mtf.exe file.sqb file.bak
。
如果我使用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
從註釋借鑑是引號的需要,在這種情況下,引號需要包圍兩個單獨的文件。
我可以確認此代碼在IISExpress上工作,模擬不同的用戶,不幸的是只是不是IIS 7.5。
工作環境是將此代碼移入控制檯應用程序並安裝在相關服務器上,然後使用Windows計劃任務作爲特定帳戶運行。
完美檢查:當你從'cmd'運行命令時它工作嗎? 'stdout'也是空的?該過程是否返回退出代碼0或其他內容?如果這一切都檢查出好,你必須有'UserName','Domain'或'Password'的東西的一些問題。 –
嘗試設置CreateNoWindow = false,以便您可以看到exe文件運行時會發生什麼。它可能會拋出一個錯誤或消息,你可以看到閃光過去。一旦你有它的工作,那麼你可以隱藏窗口。 –
如果我將CreateNoWindow設置爲false,則不會出現窗口,如果我拼錯用戶名,則會出現錯誤:登錄失敗:未知用戶名或密碼錯誤,因此我會假設是正確還是錯誤,如果我沒有收到此錯誤域名,用戶名和密碼正常工作。 – iggyweb