1

いくつかのレポートを生成するWPFアプリケーションがあります。このアプリケーションをWindowServiceから起動する必要があり、現在LocalSystemとして実行されているサービスから実行しています。Pie 3dを除いて、すべてのレンダリングは適切に行われ、Viewport3Dオブジェクトに表示されます。これは、動作を示すコード抽出です。

static class VisualSaver
    {
        public static void Save(Visual v, int width, int height, string file,Brush background)
        {
            RenderTargetBitmap bmp = new RenderTargetBitmap(
                        width, height, 96, 96, PixelFormats.Pbgra32);

            Rectangle vRect = new Rectangle();
            vRect.Width = width;
            vRect.Height = height;
            vRect.Fill = background;
            vRect.Arrange(new Rect(0, 0, vRect.Width, vRect.Height));

            bmp.Render(vRect);
            bmp.Render(v);

            PngBitmapEncoder png = new PngBitmapEncoder();
            png.Frames.Add(BitmapFrame.Create(bmp));

            using (Stream stm = File.Create(file))
            {
                png.Save(stm);
            }
        }
    }

そして、これは呼び出しコードです:

VisualSaver.Save(viewport,310,340,PathExtension.GetTempFileWithExtension("png"),Brushes.White);

そして、はい、ビューポートは適切に測定/配置されています。

3Dオブジェクトの非対話型アプリケーションからのレンダリングにいくつかの制限がありますか?私はWindows7-2008サーバー環境にいます。?回避策はありますか?

4

1 に答える 1

0

残念ながら、このポリシーのために:

WindowsXP®、WindowsServer®2003、および以前のバージョンのWindows®オペレーティングシステムでは、すべてのサービスは、コンソールにログオンした最初のユーザーと同じセッションで実行されます。このセッションはセッション0と呼ばれます。セッション0でサービスとユーザーアプリケーションを一緒に実行すると、セキュリティリスクが発生します。これは、サービスが昇格された特権で実行されるため、自身の特権レベルを昇格させる手段を探している悪意のあるエージェントのターゲットになるためです。


WindowsVista®およびWindowsServer®2008オペレーティングシステムは、セッション0でサービスを分離し、セッション0を非対話型にすることで、このセキュリティリスクを軽減します。WindowsVistaおよびWindowsServer2008では、システムプロセスとサービスのみがセッション0で実行されます。最初のユーザーはセッション1にログオンし、後続のユーザーは後続のセッションにログオンします。このアプローチは、サービスがユーザーのアプリケーションと同じセッションで実行されることはなく、したがって、アプリケーションコードから発生する攻撃から保護されることを意味します。

Windows 7 2008では、ビデオドライバーを含むすべてのレンダリングが失敗します。したがって、唯一の解決策は、アプリでサービスを公開し、デスクトップで実行することです。

于 2013-02-05T14:09:17.153 に答える