2013-02-04 5 views
1

J'ai une application WPF qui génère des rapports. J'ai besoin de lancer cette application à partir d'un WindowService, et je l'exécute actuellement à partir d'un service s'exécutant en tant que LocalSystem. Tout le rendu est effectué correctement, à l'exception d'un affichage Pie 3d dans un objet Viewport3D. Ce est une extraction de code montrant le comportement:Rendu Viewport3d à partir d'un service Windows

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

Et ceci est le code d'appel:

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

Et oui la fenêtre est correctement Mesuré/Disposé.

Existe-t-il une limitation dans le rendu des applications non interactives d'objets 3D, je suis dans Windows7 - 2008 serveur env. ? Y a-t-il une solution de contournement?

Répondre

0

Malheureusement, en raison de cette politique:

Dans Windows XP ®, Windows Server® 2003, et les versions antérieures du système d'exploitation Windows®, tous les services gérés dans la même session que le premier utilisateur qui se connecte à la console. Cette session est appelée Session 0. L'exécution simultanée de services et d'applications utilisateur dans la session 0 présente un risque de sécurité car les services s'exécutent à privilèges élevés et sont donc des cibles pour les agents malveillants qui recherchent un moyen d'élever leurs propres niveaux de privilèges.


Les systèmes d'exploitation Windows Vista® et Windows Server® 2008 de réduire ce risque de sécurité en isolant les services en session 0 et faire Session 0 non-interactive. Dans Windows Vista et Windows Server 2008, seuls les processus et services système s'exécutent dans la session 0. Le premier utilisateur se connecte à la session 1 et les utilisateurs suivants se connectent aux sessions suivantes. Cette approche signifie que les services ne s'exécutent jamais dans la même session que les applications des utilisateurs et sont donc protégés contre les attaques provenant du code de l'application.

Sous Windows 7 2008, tous les rendus impliquant les pilotes vidéo échouent. Ainsi, la seule solution consiste à faire en sorte que l'application expose un service et fonctionne sur un ordinateur de bureau.

Questions connexes