Tôi cố gắng để chạy một lệnh cmd với đoạn mã sau:Run quá trình nâng
ProcessStartInfo cmd = new ProcessStartInfo("cmd.exe");
cmd.RedirectStandardInput = true;
cmd.RedirectStandardOutput = true;
cmd.RedirectStandardError = true;
cmd.UseShellExecute = false;
cmd.CreateNoWindow = true;
cmd.WindowStyle = ProcessWindowStyle.Hidden;
Process exec = Process.Start(cmd);
exec.StandardInput.WriteLine("sc create \"BaliService\" binPath= \"{0}\\BaliService.exe\"", Directory.GetCurrentDirectory());
Lệnh này đòi hỏi privelages admin, nếu tôi chạy cmd as administrator và gõ lệnh nó hoạt động hoàn hảo nhưng không phải khi tôi chạy ứng dụng này là quản trị viên. Tôi đã thêm
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
đến một file manifest mà nhắc uac mỗi lần tôi mở exe.
Tôi đã thấy nhiều câu hỏi về điều này và tất cả dường như đề xuất bất kỳ quy trình nào chạy dưới ứng dụng được nâng cao sẽ có cùng quyền nhưng điều này không hiệu quả đối với tôi.
Tôi đã thử cmd.Verb = "runas";
nhưng không có súc sắc.
Hãy thử thay đổi 'cmd.UseShellExecute' để 'true' và giữ' cái động từ runas'. – keyboardP
Chỉ cần thử nó nhưng có lỗi này 'Các đối tượng quá trình phải có thuộc tính UseShellExecute đặt thành false để chuyển hướng IO streams.' Cảm ơn. –
Đó là nơi buck dừng lại, bạn không thể có cả hai cách. UAC ngăn chặn một quá trình không liên quan từ hi-jacking các khả năng của một nâng cao. Cách duy nhất bạn có thể chuyển hướng là nâng cao bản thân trước. –