Tôi hiện đang sử dụng phương pháp phát triển nội bộ để chạy quy trình với tư cách người dùng khác trong Vista và tôi không thể thoát khỏi cảm giác đó là hack-ish và ít hơn lý tưởng (ngoài thực tế là nó khao khát UAC, làm hỏng ứng dụng của tôi với một ngoại lệ bảo mật và buộc tôi phải tắt hoàn toàn UAC). quá trình của tôi bao gồm hai dự án (do hai tập tin EXE) - một "giao diện" và một "ra mắt còn sơ khai" - và đây là quá trình:Chạy quy trình mới với tư cách người dùng khác trong vb.net
- Người dùng có một phím tắt mà ra mắt "Interface.exe notepad.exe"
- Interface.exe có một hình thức mà yêu cầu các thông tin mà họ muốn sử dụng
- Interace.exe sử dụng ProcessStartInfo để tạo ra một thể hiện của LaunchStub.exe (LS) như là người dùng mới
- LS sử dụng ProcessStartInfo (với ShellExecute được đặt thành true) để khởi chạy tệp được yêu cầu và vì nó đã chạy như người dùng được yêu cầu, do đó, là quy trình mới.
Lý do tôi có quy trình gồm hai bước là tôi muốn người dùng có thể nhấp chuột phải vào bất kỳ tệp nào mà hệ điều hành có hành động mặc định cho (.EXE, .SQL, .MSC, v.v ...) khởi động nó, và ProcessStartInfo chỉ hỗ trợ rằng với "UseShellExecute" được kích hoạt, nhưng chuyển đổi đó ngăn cản tôi sử dụng thông tin đăng nhập mới, vì vậy tôi chỉ có thể làm một tại một thời điểm.
Điều này gây ra một số vấn đề - đầu tiên, người dùng phải đã tồn tại trên máy tính, nghĩa là họ phải đăng nhập cục bộ trước đó. Nếu không có hồ sơ cục bộ cho người dùng đó, ứng dụng được yêu cầu đôi khi sẽ khởi chạy, nhưng tôi nhận được đăng ký và ngoại lệ hồ sơ vì ứng dụng mong đợi mọi thứ tồn tại mà chưa (như HKCU hive trong sổ đăng ký mà người dùng không vì họ chưa bao giờ đăng nhập).
Tôi biết tôi có thể chỉ "Nâng cao" quyền của ứng dụng cho người dùng mà họ đang yêu cầu, khởi chạy quy trình mới của tôi và sau đó hoàn tác độ cao, nhưng tôi không thể tìm thấy mẫu mã tốt cho điều đó, và tôi không chắc rằng nó sẽ cho phép chạy như một người dùng hoàn toàn khác. Tất cả điều này có hợp lý không? Tôi không thể không cảm thấy như có một cách tốt hơn để làm điều này.
UPDATE: Tôi chỉ cố gắng some Impersonation code tôi tìm thấy trên mạng, nhưng không có kết quả. Khi được sử dụng kết hợp với ProcessStartInfo, nó vẫn có vẻ như khởi chạy các tiến trình bằng cách sử dụng thông tin đăng nhập hiện tại của tôi, không phải là quy trình mà tôi đã cung cấp, mặc dù tôi đã kích hoạt mạo danh bằng các thông tin được cung cấp.
Tôi sẽ thử tính năng này và xem điều gì sẽ xảy ra. Nếu tôi có thể làm điều đó mà không cần phải sử dụng một EXE thứ hai như là một bài sơ khai, tôi sẽ hạnh phúc, và thậm chí nhiều hơn như vậy nếu nó không crap ra khi UAC được kích hoạt (tôi sẽ đối phó với một dấu nhắc). Tôi sẽ được bakc sau khi tôi đã thử nó. – SqlRyan
@SqlRyan và đã làm việc với UAC kích hoạt ?? – Jet