6

次の問題があります。

サービスから、ユーザー セッションでアプリケーションを開始する必要があります。そのマシンはサーバーであるため、人間のユーザーがそのマシンにログオンすることはありません。起動されたアプリケーションには、セッション != 0 が必要です。

現在の「解決策」

マシンの起動時にスケジュールされたタスクを使用しました。そのタスクは、同じマシンでリモート デスクトップ ログオンを起動するアプリケーションを (もちろんセッション 0 で) 起動します。これにより、0 を超えるユーザー セッションが作成され、ユーザーの起動時に、発売。機能しますが、トリッキーすぎます。

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

メジャーアップデート

多くの調査と部分的な成功の後、特定の目的のためにユーザーを作成することに関する SysAdmin の柔軟性の欠如のおかげで、セッション 0 で壊れた 3D 部分をレンダリングするために WPF の代わりにOpenGLを使用することにしました。驚くべきことに、予想よりも時間がかかりませんでした。 . この質問を参照として持つことは、サービスからViewport3Dをレンダリングしようとする他の人にとって役立つと思います。

4

3 に答える 3

0

これがうまくいくかどうかはわかりませんが、おそらくこの答えがあなたの場合に役立ちます。

私が提供したリンクの回答のクラスと次のメソッドを使用します(適切な値を使用):

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

一般的なデバイス クラス GUIDの一覧を次に示します。

于 2013-03-01T16:50:59.223 に答える
0

あなたのニーズを正しく理解しているかどうかはわかりませんが、与えられた資格情報でプロセスを開始し、入力と出力をリダイレクトするだけで十分です。指定された資格情報でプロセスを開始します:

  Process p = new Process();

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

  p.Start();

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

于 2013-03-07T13:51:27.337 に答える