2013-02-27 39 views
5

Tôi gặp sự cố sau:Bắt đầu phiên người dùng mới từ dịch vụ

Từ dịch vụ Tôi cần khởi động ứng dụng trong phiên người dùng. Không có người dùng nào đăng nhập vào máy đó vì nó là một máy chủ. ứng dụng đưa ra phải có một phiên! = 0.

hiện "giải pháp"

tôi đã sử dụng một nhiệm vụ theo lịch trình lúc khởi động máy, mà ra mắt nhiệm vụ (trong phiên 0, tất nhiên) một ứng dụng tung ra một Remote Desktop đăng nhập trên cùng một máy: điều này tạo ra một phiên người dùng> 0 và trong khởi động người dùng là ứng dụng cuối cùng để khởi chạy. Nó hoạt động, nhưng quá phức tạp.

Có cách nào thông minh nhất không? Điều quan trọng là tôi có thể sử dụng lại phiên người dùng đã được bật vì có khả năng không có người dùng nào đăng nhập.

YẾU CẬP NHẬT

Vâng sau rất nhiều nghiên cứu và thành công một phần, và cũng nhờ vào một số quản trị hệ thống cứng nhắc về việc tạo một người dùng cho một pourpose cụ thể, tôi quyết định sử dụng OpenGL thay vì WPF cho làm phần 3d bị hỏng trong Phiên 0. Đáng ngạc nhiên là nó mất ít hơn mong đợi. Tôi nghĩ rằng việc đặt câu hỏi này làm tham chiếu có thể hữu ích cho những người khác muốn thử hiển thị Viewport3D từ một dịch vụ.

+1

Có vẻ như bạn đang cố khắc phục sự cố không đúng. * Tại sao * ứng dụng khởi chạy này phải chạy ngoài phiên 0? –

+0

@Damien_The_Unbeliever cần trình điều khiển video. Tôi muốn nói rằng nếu tôi có thể tránh được nhu cầu của phiên, tôi sẽ có rất nhiều niềm vui. –

+1

Âm thanh đó có giống như những gì bạn cần không? http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows-service-in-windows-vista-and-later.aspx –

Trả lời

0

Tôi không chắc liệu điều này có hiệu quả hay không, nhưng có thể this answer sẽ giúp trong trường hợp của bạn.

Sử dụng các lớp từ câu trả lời tôi liên kết tôi cung cấp và các phương pháp sau đây (với các giá trị thích hợp):

public static void EnableVideoDrivers(bool enable) 
{ 
    // every type of device has a hard-coded GUID, put here the one for 
    // video drivers 
    Guid videoGuid = new Guid("{device GUID}"); 

    // get this from the properties dialog box of this device in Device Manager 
    string instancePath = @"Device Instance Path"; 

    DeviceHelper.SetDeviceEnabled(videoGuid, instancePath, enable); 
} 

Dưới đây là danh sách các Popular Device Class GUIDs.

0

Tôi không chắc mình hiểu chính xác nhu cầu của bạn, nhưng có lẽ chỉ là quy trình bắt đầu với thông tin đăng nhập và đầu vào và đầu ra chuyển hướng là những gì bạn cần. Quá trình bắt đầu với thông tin xác thực đã cho:

Process p = new Process(); 

    p.StartInfo = new ProcessStartInfo(fileName, args); 
    p.StartInfo.UserName = userName; 
    p.StartInfo.Password = pass; 

    p.Start(); 

Bạn cũng có thể cần chuyển hướng đầu vào và đầu ra của ứng dụng. Vấn đề đó được mô tả tốt trên CodeProjecgt trong số artice này.

+0

Nó sẽ được tốt đẹp nếu nó rất đơn giản. Vấn đề là làm điều này từ một dịch vụ (session id = 0) để lại quá trình sinh sản trong cùng một phiên, tôi cần một id phiên <> 0. –

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