我創建了一個實用程序來鎖定文件lockfile.exe
,它接受兩個參數:文件名(要鎖定的文件)和fileShare(要應用的共享)。然後我從另一個應用程序中調用該實用程序來測試處理鎖定文件時的錯誤條件。 lockfile.exe
實用程序會鎖定具有指定共享的文件,然後等待任何字符輸入以釋放鎖定並退出。如何重定向StandardInput進程沒有進程立即退出?
在我的測試應用程序,我創建了一個類FileLocker
兩種方法LockFile
和UnlockFile
如下:
public class FileLocker
{
private Process process;
public void LockFile(string fileName)
{
this.process = new Process();
this.process.StartInfo.RedirectStandardInput = true;
this.process.StartInfo.UseShellExecute = false;
this.process.StartInfo.CreateNoWindow = true;
this.process.StartInfo.FileName = "lockfile.exe";
this.process.StartInfo.Arguments =
"\"" + fileName + "\" " + FileShare.Read.ToString();
this.process.Start();
}
public void UnlockFile()
{
this.process.StandardInput.Write('X');
this.process.StandardInput.Flush();
this.process.WaitForExit();
this.process.Close();
}
}
當我調用該方法LockFile
進程啓動後立即退出。它不會等待UnlockFile
中的輸入。當我不重定向標準輸入時,該過程將等待鍵盤輸入。
我需要更改/修復哪些內容,以便過程不會立即退出。我需要它等待UnlockFile
中提供的輸入,並且只有當流程結束時纔會退出?
更新:
更新,以顯示FileLocker
級以上,並提供樣品下方電話:
class Program
{
static void Main(string[] args)
{
FileLocker locker = new FileLocker();
locker.LockFile("HelloWorld.txt");
locker.UnlockFile();
}
}
你能告訴你如何調用'LockFile'和'UnlockFile'方法。 – ChrisF
@ChrisF:請參閱更新後的帖子。 – Elan
我用一個包含一個簡單的Console.ReadLine()的LockFile.exe測試了你的程序,並且如果我改變Write('X')調用WriteLine(「X」),它就像預期的那樣工作。所以我懷疑你的問題是在lockfile.exe程序而不是這個。你如何等待LockFile.exe中的按鍵(或輸入)? (請注意,Console.ReadKey()可能不起作用,因爲它沒有通過標準輸入流來檢測輸入) – DeCaf