Tôi muốn bắt đầu một tiến trình con (thực sự là cùng một ứng dụng bảng điều khiển) với các đặc quyền nâng cao nhưng với cửa sổ ẩn.Đặc quyền nâng cao không hoạt động với UseShellExecute = false
tôi làm gì tiếp theo:
var info = new ProcessStartInfo(Assembly.GetEntryAssembly().Location)
{
UseShellExecute = true, // !
Verb = "runas",
};
var process = new Process
{
StartInfo = info
};
process.Start();
và các công trình này:
var identity = new WindowsPrincipal(WindowsIdentity.GetCurrent());
identity.IsInRole(WindowsBuiltInRole.Administrator); // returns true
Nhưng UseShellExecute = true
tạo ra một cửa sổ mới và tôi cũng tôi không thể chuyển hướng đầu ra.
Vì vậy, khi tôi làm gì tiếp theo:
var info = new ProcessStartInfo(Assembly.GetEntryAssembly().Location)
{
RedirectStandardError = true,
RedirectStandardOutput = true,
UseShellExecute = false, // !
Verb = "runas"
};
var process = new Process
{
EnableRaisingEvents = true,
StartInfo = info
};
DataReceivedEventHandler actionWrite = (sender, e) =>
{
Console.WriteLine(e.Data);
};
process.ErrorDataReceived += actionWrite;
process.OutputDataReceived += actionWrite;
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
này không nâng cao đặc quyền và mã trả về trên sai. Tại sao??
BTW, bạn có thể viết 'DataReceivedEventHandler actionWrite = ...' và 'process.ErrorDataReceived + = actionWrite'. – SLaks
Bạn có thể thử nghiệm sử dụng các sự kiện UseShellExecute = true, Verb = "runas" và ErrorDataReceived dưới dạng nhận xét @SLaks không? – Kiquenet