我創建了一個啓動兩種類型進程的進程處理程序: 用管理員用戶名和密碼提升的進程處理程序 另一個運行正常,沒有任何用戶名和密碼輸入。從高架子進程獲取錯誤和標準輸出
我struggeling弄清楚如何從高架過程獲取輸出。啓動進程的應用程序不需要管理員憑據運行,管理員憑據將輸入到單獨加密的xml文件中,該文件應用程序在需要管理員憑證的腳本和其他位置使用該文件。
由於應用程序與正常用戶運行,訪問該應用程序已經開始升高的過程中,似乎是不可能的。我可以開始一個過程,並且可以輕鬆地檢查它是否完成了它所支持的過程,但我無法將其操作讀取到字符串或日誌中。
public bool CreateProcessWithAdminRights(string filePath, string commandlineArgument, bool log)
{
if (!string.IsNullOrEmpty(filePath) && !string.IsNullOrEmpty(commandlineArgument) && _user.UserDataExsists())
{
var securePassword = GetSecureString(_user.Password);
ToolsProvider.Logger.Debug("Creating process with the following filepath: {0} and commandline argument: {1}", filePath, commandlineArgument.Replace(_user.Password, "<REPLACED>"));
ToolsProvider.Logger.Info("Creating Process with admin rights for {0} against {1}", _user.Name);
_proc = new Process
{
StartInfo =
{
FileName = @filePath,
Arguments = commandlineArgument,
ErrorDialog = false,
RedirectStandardInput = false,
RedirectStandardOutput = _log,
RedirectStandardError = _log,
UseShellExecute = false,
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
UserName = _user.Name,
Password = securePassword,
Domain = _user.Domain
}
};
_proc.ErrorDataReceived += ErrorDataReceived;
_proc.OutputDataReceived += OutputDataReceived;
return true;
}
return false;
}
的進程正在使用開始:
private bool StartProcess()
{
if (_proc != null)
{
try
{
_proc.Start();
_proc.BeginErrorReadLine();
_proc.BeginOutputReadLine();
_proc.WaitForExit();
_proc.CancelOutputRead();
_proc.CancelErrorRead();
if (_standardOutput.Length > 2)
{
// use writeline, the builder itself will add the DEBUG/info tag
ToolsProvider.Logger.WriteLine(_standardOutput.ToString());
}
if (_errorBuilder.Length > 2)
{
// use writeline, the builder itself will add the DEBUG/info tag
ToolsProvider.Logger.WriteLine(_errorBuilder.ToString());
}
return true;
}
catch (Win32Exception ex)
{
ToolsProvider.Logger.Error(
"Missing file while trying to run an action: " + _proc.StartInfo.FileName, ex.Message);
}
}
ToolsProvider.Logger.Error("");
return false;
}
我試着用模仿類爲好,有和沒有加入到過程中的管理員憑據啓動進程。假冒者類沒有做任何事情,但告訴我,我沒有acccess沉綿我冒充管理員...
我從這裏冒領類:
http://freshclickmedia.co.uk/2008/11/programmatic-impersonation-in-c/
所以,如何在不升高的過程中從升級過程中獲得標準和錯誤輸出?
您可以使用'Named Pipes':http://msdn.microsoft.com/en-us/library/bb546085.aspx – SepehrM