2015-07-27 19 views
5

Tôi muốn bắt đầu một chương trình khác chạy với tư cách người dùng từ một chương trình đang chạy với tư cách là quản trị viên.Bắt đầu quá trình với tư cách người dùng từ quá trình chạy với tư cách là quản trị viên

Vấn đề là chương trình thứ hai cần sử dụng triển vọng, điều này là không thể nếu chương trình chạy dưới dạng quản trị viên. Chương trình chính cần chạy với tư cách quản trị viên.

tôi đã đưa ra hai giải pháp này:

Process.Start("cmd.exe", @"/C runas.exe /savecred /user:" + Environment.UserDomainName + "\\" + Environment.UserName + " " + "\"SomeProgram.exe" + "\""); 

hoặc

Process.Start("explorer.exe", "SomeProgram.exe"); 

Nhưng tôi có một vấn đề với cả hai giải pháp. Người đầu tiên yêu cầu người dùng nhập mật khẩu (chỉ lần đầu tiên sau khi các cửa sổ được khởi động lại). Người thứ hai không thể làm việc trong tương lai, bởi vì theo như tôi phát hiện ra nó được coi là một lỗi và có thể được sửa với bản cập nhật trong tương lai.

Vì vậy, tôi muốn biết có giải pháp nào khác, nơi người dùng không cần phải nhập mật khẩu của mình không?

Điều này dường như làm việc cho tôi:

Process.Start("cmd.exe", @"/C runas.exe /TrustLevel:0x20000 " + "\"SomeProgram.exe" + "\""); 
+1

Raymond Chen đã làm một công việc tốt của mô tả này trong [Làm thế nào tôi có thể khởi động một quá trình unelevated từ quá trình cao của tôi và ngược lại?] (Http://blogs.msdn.com/b/oldnewthing/archive/ 2013/11/18/10468726.aspx) (cũng bao gồm tất cả các loại chi tiết như khi độ cao sử dụng thông tin đăng nhập tài khoản khác nhau cho những người được sử dụng cho phần còn lại của phiên) –

+0

Nhưng không phải đó chỉ là một cách khác để sử dụng exploer.exe để thực hiện công việc? Dù sao tôi tìm thấy một giải pháp khác, tôi đã thêm nó vào bài đăng gốc. – FKorni

+0

Giải pháp của bạn có giải quyết chính xác với việc nâng cấp từ tài khoản quản trị của Alice sang tài khoản người dùng của Bob (sử dụng các ví dụ từ liên kết Raymonds) không? –

Trả lời

1

Process lớp có StartInfo tài sản đó là một thể hiện của lớp ProcessStartInfo. Lớp này hiển thị các thành viên UserName, DomainPassword để chỉ định người dùng bạn muốn chạy quy trình.

Process myProcess = new Process(); 
myProcess.StartInfo.FileName = fileName; 
myProcess.StartInfo.UserName = userName; 
myProcess.StartInfo.Domain = domain; 
myProcess.StartInfo.Password = password; 
myProcess.Start(); 
+0

Điều đó có nghĩa là tôi cần phải biết mật khẩu người dùng, đó không phải là trường hợp. Chương trình được sử dụng bởi nhiều người dùng khác nhau, vì vậy đây không phải là một lựa chọn cho tôi. – FKorni

+0

@FKorni Tôi không nghĩ rằng bạn có thể mạo danh người dùng khác mà thậm chí không biết thông tin đăng nhập –

+0

Vâng chương trình chính yêu cầu quyền quản trị với tệp kê khai, nhưng chương trình thứ hai sẽ chỉ chạy với người dùng bình thường của phiên hiện tại. – FKorni

Các vấn đề liên quan