2013-02-27 5 views
5

私は以下の問題を抱えています:サービスから新しいユーザーセッションを開始する

サービスから私はユーザーセッションでアプリケーションを起動する必要があります。そのマシンはサーバーなので、人間のユーザーはログオンしません。起動したアプリケーションは、セッションを持っている必要があります!= 0

現在の「ソリューション」

私は(もちろん、セッション0での)マシンの起動時にスケジュールされたタスク、そのタスクの起動を使用するリモートデスクトップを起動するアプリケーション同じマシン上でのログオン:これはユーザーセッション> 0を作成し、ユーザー起動時には起動する最終アプリケーションです。それはうまくいくが、扱いにくい。

スマートな方法はありますか?ユーザーがログオンしていない可能性があるため、既にオンになっているユーザーセッションを再利用できることが重要です。

MAJOR UPDATE研究と部分的成功、および特定のpourposeのためのユーザーの作成について、いくつかのシステム管理者の硬直にも感謝の多くは、私はレンダリングのためののOpenGLの代わりに、WPFを使用することを決めた後も

セッション0で3d部分が壊れた。 驚いたことに、それは予想よりも少なかった。この質問を参考にすることは、サービスからViewport3Dをレンダリングしようとする他の人には役に立ちます。

+1

間違った問題を解決しようとしているようです。 *なぜこの起動アプリケーションはセッション0の外で実行する必要がありますか? –

+0

@Damien_The_Unbelieverはビデオドライバが必要です。私は、必要なセッションを避けることができれば、私はたくさんの喜びをもって言いたいと思います。 –

+1

それはあなたが必要とするように聞こえるのですか? http://blogs.msdn.com/b/winsdk/archive/2009/07/14/launching-an-interactive-process-from-windows-service-in-windows-vista-and-later.aspx –

答えて

0

これが機能するかどうかはわかりませんが、場合によってはthis answerが役立ちます。

は私が提供されたリンクの答えと(適切な値)は、以下の方法からクラスを使用します。

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); 
} 

ここPopular Device Class GUIDsのリストです。

0

あなたのニーズを正しく理解しているかどうかは不明ですが、特定の資格情報でプロセスを開始し、入力と出力をリダイレクトするだけで必要なものになっている可能性があります。指定された資格情報を使用したプロセスの開始:

Process p = new Process(); 

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

    p.Start(); 

また、アプリケーションの入力と出力をリダイレクトする必要があります。この問題は、articeのCodeProjecgtに詳しく説明されています。

+0

それがとてもシンプルだったらいいと思います。問題は、これをサービス(セッションID = 0)から実行すると、同じセッションでスポーンプロセスが残っているため、セッションID <> 0が必要です。 –

関連する問題