none
ReportViewer 10 externe Bilder RRS feed

  • Frage

  • Ich benutzte die Winform ReportViewer 10 Komponte und versuche ein Bild dynamisch in meinen localen Report hinzu zufügen.

    Leider wird dieses Bild nur als "X" angezeigt.

     

    Der Report enthält ein Bild wo die Source auf External steht.

    Den Bildpfad hatte ich versucht ueber einen Parameter (=Parameters!PathL2.Value) hinzu zufuegen.

     

    Uri uri = new Uri("e:\\logo.bmp");
    
    List<ReportParameter> param1 = new List<ReportParameter>();
    
    param1.Add(new ReportParameter("PathL2", uri.AbsoluteUri));
    
    reportViewer1.LocalReport.SetParameters(param1);   
    
    reportViewer1.LocalReport.EnableExternalImages = true;
    
    reportViewer1.RefreshReport();
    

     

     

    Aber warum wird das Bild im ReportViewer nicht angezeigt?

     

    MFG Franko

    Samstag, 22. Januar 2011 10:58

Antworten

  • Hallo Frank,

    ja, dann liegt es sicher an Fat32! Mit den geforderten NTFS-Dateierechten kann FAT nichts anfangen.

    vorweg ... man nimmt ja heutzutage oft eher NTFS, da hier u.a. einfacher und wirkungsvoller den Benutzern verschiedene Rechte zugewiesen werden können.

    Zunächst musst bedenken, es gibt normal immer 2 Rechte-Aspekte:

    • Permissions on a Shared Folder
      Access on a shared folder is determined through two sets of permission entries; the permissions that are set on the share (called share permissions) and the permissions that are set on the folder (called NTFS file and folder permissions). Share permissions are often used for managing computers with FAT32 file systems or for managing other computers that do not use the NTFS file system.

      NTFS - Objekt kopieren auf eine FAT - Partition keine Rechtevergabe
      auf der selben Partition erbt die Eigenschaften des übergeordneten Ordners
      auf eine andere NTFS - Partition erbt die Eigenschaften des übergeordneten Ordners
      NTFS - Objekt verschieben auf eine FAT - Partition keine Rechtevergabe
      auf der selben Partition Eigenschaften bleiben erhalten
      auf eine andere NTFS - Partition erbt die Eigenschaften des übergeordneten Ordners
    • Fat32 hat keine "Dateisystemrechte"!
      Shared folders are stored on NTFS file system volumes.
      You can set permissions at the file level only if the files are stored on an NTFS volume.
      On a FAT or FAT32 volume, you can set permissions for shared folders but not for files and folders within a shared folder. Moreover, share permissions on a FAT or FAT32 volume restrict network access only, not access by users working directly on the computer.

    ... Share permissions are often used for managing computers with FAT32 file systems or for managing other computers that "do not use" the NTFS file system.

    Hier auch ein Detail-Vergleich von NTFS und FAT32:

    [File System Functionality Comparison (Windows)]
    http://msdn.microsoft.com/en-us/library/ee681827(VS.85).aspx

    woran Du erkennen kannst, dass FAT32 keine "Track file owner" und keine "Access control lists" (Zugriffskontroll-Listen) hat.


    ciao Frank
    Montag, 24. Januar 2011 22:11
  • Hallo Franko,

    Hier kommt die Berichtdefinition:

    <?xml version="1.0" encoding="utf-8"?>
    <Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition">
     <Body>
     <ReportItems>
      <Image Name="image1">
      <Source>Database</Source>
      <Value>=System.Convert.FromBase64String(Parameters!ReportLogo.Value)</Value>
      <MIMEType>=Parameters!ReportLogoMimeType.Value</MIMEType>
      <Sizing>FitProportional</Sizing>
      <Top>0.25cm</Top>
      <Left>0.25cm</Left>
      <Height>1.1791cm</Height>
      <Width>1.3969cm</Width>
      <Style />
      </Image>
     </ReportItems>
     <Height>9.94127cm</Height>
     <Style />
     </Body>
     <ReportParameters>
     <ReportParameter Name="ReportLogoMimeType">
      <DataType>String</DataType>
      <Prompt>ReportParameter1</Prompt>
     </ReportParameter>
     <ReportParameter Name="ReportLogo">
      <DataType>String</DataType>
      <Prompt>ReportParameter1</Prompt>
     </ReportParameter>
     </ReportParameters>
     <Width>12.94841cm</Width>
     <Page>
     <PageHeight>29.7cm</PageHeight>
     <PageWidth>21cm</PageWidth>
     <InteractiveHeight>11in</InteractiveHeight>
     <InteractiveWidth>8.5in</InteractiveWidth>
     <LeftMargin>2.5cm</LeftMargin>
     <RightMargin>2.5cm</RightMargin>
     <TopMargin>2.5cm</TopMargin>
     <BottomMargin>2.5cm</BottomMargin>
     <ColumnSpacing>1cm</ColumnSpacing>
     <Style />
     </Page>
     <Language>de-DE</Language>
     <ConsumeContainerWhitespace>true</ConsumeContainerWhitespace>
     <rd:ReportID>0329bb79-c4ec-4bc1-90d1-99b7b4392eb5</rd:ReportID>
     <rd:ReportUnitType>Cm</rd:ReportUnitType>
    </Report>
    

    Und der Code:

    private void Form1_Load(object sender, EventArgs e)
    {
     Image img = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg");
     string base64Logo = ConvertImageToBase64(img, ImageFormat.Jpeg);
     ReportParameter[] reportParams = new ReportParameter[2];
     reportParams[0] = new ReportParameter("ReportLogo", base64Logo); 
     reportParams[1] = new ReportParameter("ReportLogoMimeType", "image/jpeg"); 
     reportViewer1.LocalReport.SetParameters(reportParams); 
     this.reportViewer1.RefreshReport();
    }
    
    private static string ConvertImageToBase64(Image image, ImageFormat format) 
    { 
     byte[] imageArray; 
       
     using (System.IO.MemoryStream imageStream = new System.IO.MemoryStream()) 
     { 
      image.Save(imageStream, format); 
      imageArray = new byte[imageStream.Length]; 
      imageStream.Seek(0, System.IO.SeekOrigin.Begin); 
      imageStream.Read(imageArray, 0, (int)imageStream.Length); 
     } 
       
     return Convert.ToBase64String(imageArray); 
    }
    
    

    Gruss
    Marcel

    Dienstag, 25. Januar 2011 22:48

Alle Antworten

  • Hallo Franko,

    Versuch mal EnableExternalImages in Deinem Code vor SetParameters() zu setzen.
    Macht das einen Unterschied?

    (P.S. Ich gehe davon aus, dass das Bild unter E:\\ auch wirklich existiert und dass keine Ausnahmen geworfen werden.)

    Gruß
    Marcel

    Samstag, 22. Januar 2011 11:52
  • Hallo Marcel,

    EnableExternalImages habe ich auch schon vor dem SetParameters() bzw auch schon selbst in den Einstellungen

    des Controls probiert. Leider ohne Erfolg.

     

    Das Bild ist vorhanden. Habe es auch schon mit unterschiedlichen Pfaden ohne Erfolg getestet.

     

    Gruss Franko

    Samstag, 22. Januar 2011 12:32
  • Hallo Franko,

    EnableExternalImages habe ich auch schon vor dem SetParameters() bzw auch schon selbst in den Einstellungen des Controls probiert. Leider ohne Erfolg.

    Das Setzen von EnableExternalImages nach SetParameters sollte zur Laufzeit eigentlich eine LocalProcessingException auslösen. (es ist seltsam, dass das bei Dir nicht passiert). Die InnerException ist in diesem Fall eine ReportSecurityException ("Der Bericht 'Report1' enthält externe Bilder. Die EnableExternalImages-Eigenschaft wurde jedoch für den Bericht nicht festgelegt.").

    Kannst Du folgende Punkte bestätigen:

    1. Die ReportViewer-Komponente bindet den richtigen lokalen Bericht ein (manchmal vertut man sich eben).
    2. Im Bericht selbst ist der Parameter "PathL2" existent (Datentyp=Text, verfügbare Werte=keiner, Standardwert=kein Standardwert)
    3. Das Bild-Berichtselement hat Source=external, Value=Parameters!PathL2.Value

    Du könntest auch versuchen, ein Berichtstextfeld testweise auf den Wert Parameters!PathL2.Value zu setzen, um zu sehen, ob der Wert richtig übergeben wurde.

    P.S. Es gibt Berichte, dass ein reportViewer1.RefreshReport() vor EnableExternalImages() manchmal hilft.

    Gruss
    Marcel

    Samstag, 22. Januar 2011 13:17
  • Hallo Marcel,

     

    Stimmt das Setzen nach der SetParameters löst eine Exception aus. Ich hatte noch EnableExternalImages im VS auf true gesetzt gehabt.

     

    1) ja es wird der richtige Report eingebunden. Mittlerweile besteht er nur noch aus einem Textfeld und einem Bild-Berichtselement.

    2) "PathL2" hat zusätzlich noch Leeren Wert ("") zulassen gehabt(Macht aber keinen Unterschied ob das aktiv ist oder nicht)

    3) beide Werte so gesetzt

     

    Das Textfeld enthaelt mittlerweile den Wert Parameters!PathL2.Value. Wird der Bericht gerendert enthaelt das Textfeld den Wert:

    "file:///e:/logo.bmp" (die Datei exitiert auch). Habe auch schon PNG und JPG Bilder getestet bzw auch ein völlig anderes Bild.

     

    reportViewer1.RefreshReport();
    reportViewer1.LocalReport.EnableExternalImages = true;
    reportViewer1.RefreshReport();
    

     

    zeigte auch kein Bild bei mir an.

     

     


    Sonntag, 23. Januar 2011 06:28
  • <?xml version="1.0" encoding="utf-8"?>
    <Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition">
     <Body>
     <ReportItems>
      <Textbox Name="Textbox1">
      <CanGrow>true</CanGrow>
      <KeepTogether>true</KeepTogether>
      <Paragraphs>
       <Paragraph>
       <TextRuns>
        <TextRun>
        <Value>=Parameters!PathL2.Value</Value>
        <Style />
        </TextRun>
       </TextRuns>
       <Style />
       </Paragraph>
      </Paragraphs>
      <rd:DefaultName>Textbox1</rd:DefaultName>
      <Top>3.72216cm</Top>
      <Left>1.20862cm</Left>
      <Height>0.79375cm</Height>
      <Width>9.10167cm</Width>
      <Style>
       <Border>
       <Style>None</Style>
       </Border>
       <PaddingLeft>2pt</PaddingLeft>
       <PaddingRight>2pt</PaddingRight>
       <PaddingTop>2pt</PaddingTop>
       <PaddingBottom>2pt</PaddingBottom>
      </Style>
      </Textbox>
      <Image Name="Image1">
      <Source>External</Source>
      <Value>=Parameters!PathL2.Value</Value>
      <Sizing>FitProportional</Sizing>
      <Top>1.52612cm</Top>
      <Left>11.3157cm</Left>
      <Height>1.87854cm</Height>
      <Width>2.01083cm</Width>
      <ZIndex>1</ZIndex>
      <Style>
       <Border>
       <Style>None</Style>
       </Border>
      </Style>
      </Image>
     </ReportItems>
     <Height>2in</Height>
     <Style />
     </Body>
     <ReportParameters>
     <ReportParameter Name="PathL2">
      <DataType>String</DataType>
      <Prompt>ReportParameter1</Prompt>
     </ReportParameter>
     </ReportParameters>
     <Width>6.5in</Width>
     <Page>
     <PageHeight>29.7cm</PageHeight>
     <PageWidth>21cm</PageWidth>
     <LeftMargin>2cm</LeftMargin>
     <RightMargin>2cm</RightMargin>
     <TopMargin>2cm</TopMargin>
     <BottomMargin>2cm</BottomMargin>
     <ColumnSpacing>0.13cm</ColumnSpacing>
     <Style />
     </Page>
     <rd:ReportID>c8f82db5-aa2d-4a63-8b30-14cbb35ef9b3</rd:ReportID>
     <rd:ReportUnitType>Cm</rd:ReportUnitType>
    </Report>
    

    Hier noch mal mein reduzierter Report. 
    Sonntag, 23. Januar 2011 06:38
  • Hallo Peter,

    [...] zeigte auch kein Bild bei mir an.


    Kann es sein, dass die Rechte für den Zugriff auf die Datei nicht ausreichen?

    Führ doch mal bitte die Anwendung als Administrator aus und sorge dafür, dass AppDomain.CurrentDomain.SetPrincipalPolicy(System.Security.Principal.PrincipalPolicy.WindowsPrincipal) gesetzt ist.

    Gruss
    Marcel

    Sonntag, 23. Januar 2011 08:45
  • Hallo Peter,

    An der Berichtsdefinition kann ich nichts entdecken, dass dazu führen könnte, dass das Bild nicht angezeigt wird. Überprüfe bitte die Zugriffsrechte.

    Gruss
    Marcel

    Sonntag, 23. Januar 2011 08:54
  • Hallo Franko,

    Also, Marcel hat schon richtige Hinweise hier gegeben, die in vielen Fällen hier zum Ziel führen können.

    Von meiner Seite aus noch ein paar Tips und ein Projekt: [Beispielprojekt-Download], das funktioniert.

    - Wichtig ist es, dass man auch die InnerException's mit ausgibt.
    - Der Benutzer, der den Report ausführt muß die Rechte haben, die Bild-Datei lesen zu können.
      Erst recht muss man daran denken, wenn die Reports später eben als
      RDL über Reporting Services im Web ausgeführt werden.
    - Man kann folgende Bildformate benutzen: bmp, png, x-png, jpg, gif (geht auch in meinem Download).

    Hier der Quellcode der Haupt-Form (Report-XML wie hier gepostet) :

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Windows.Forms;
    using Microsoft.Reporting.WinForms;
    using System.Security.Principal;
    
    namespace WinReportImageDemo
    {
     public partial class Form1 : Form
     {
      public Form1()
      {
       InitializeComponent();
      }
    
      private void Form1_Load(object sender, EventArgs e)
      {
       Ausführen(b => BerichtRefreshen(b),
        /*"e:\\logo.bmp"*/ "logo.bmp", "Problem bei Berichts-Aktualisierung");
      }
    
      void BerichtRefreshen(string bildPfad)
      {
       // using Microsoft.Reporting.WinForms;
       if (bildPfad.Length < 2)
        throw new FileNotFoundException("Der Bildpfad ist zu kurz", bildPfad.ToString());
       if (bildPfad[1] != ':')
        bildPfad = Path.Combine(Application.StartupPath, bildPfad);
       if (!File.Exists(bildPfad))
        throw new FileNotFoundException("Der Bildpfad existiert nicht", bildPfad);
       Uri uri = new Uri(bildPfad);
       List<ReportParameter> param1 = new List<ReportParameter>();
       param1.Add(new ReportParameter("PathL2", uri.AbsoluteUri));
       reportViewer1.LocalReport.EnableExternalImages = true; //Reihenfolge wichtig!
       reportViewer1.LocalReport.SetParameters(param1);
       reportViewer1.RefreshReport();
      }
    
      /// <summary>Führt die Aktion mit Berücksichtigung der InnerExceptions aus</summary>
      void Ausführen(Action<string> action,
       string bild, string titelBeiFehlermeldung)
      {
       try
       {
        action.Invoke(bild);
       }
       catch (FileNotFoundException fileExp)
       {
        string fehlerMeldung =String.Format("{0}\nDateiname: '{1}'", 
         fileExp.Message, fileExp.FileName);
        Exception exp = fileExp.InnerException;
        while (exp != null)
        {
         fehlerMeldung += "\n" + exp.InnerException.Message;
         exp = exp.InnerException;
        }
        FehlermeldungAusgeben(fehlerMeldung, titelBeiFehlermeldung);
       }
       catch (Exception exp)
       {
        string fehlerMeldung = exp.Message;
        while (exp.InnerException != null)
        {
         fehlerMeldung += "\n" + exp.InnerException.Message;
         exp = exp.InnerException;
        }
        FehlermeldungAusgeben(fehlerMeldung, titelBeiFehlermeldung);
       }
      }
    
      private void FehlermeldungAusgeben(string fehlerMeldung, string titelBeiFehlermeldung)
      {
       fehlerMeldung += "\n\n(Ausgeführt von: '" + WindowsIdentity.GetCurrent().Name + "')";
       MessageBox.Show(fehlerMeldung, titelBeiFehlermeldung,
        MessageBoxButtons.OK, MessageBoxIcon.Warning);
      }
     }
    }
    
    

    ciao Frank
    Sonntag, 23. Januar 2011 11:58
  • Hallo Frank,

    ich habe gerade Dein Beispiel Projekt bei mir getestet und es wird auch hier 

    kein Bild im Report angezeigt. Egal ob ich es als Benutzer oder Administrator 

    ausführe.

     

    Gruss Franko

    Sonntag, 23. Januar 2011 20:36
  • Hallo Marcel,

     

    das Bild hatte ich schon zu Testzwecken Vollzugriff gegeben. Auch wenn ich das

    Programm als Admin ausführe, wird das Bild nicht angezeigt.

     

    Gruss Franko

    Sonntag, 23. Januar 2011 20:38
  • Hallo Franko,

    ok, also bei mir läuft das sowohl mit dem Original-Projekt, als auch mit "e:\logo.bmp" [Windows 7 / .NET 4.0].

    Um Dir zu helfen, sind wir auf die Informationen von Dir angewiesen und darauf, dass unsere Fragen genau beantwortet werden.

    1) gibt es denn eine Fehlermeldung? 
    2) Auf was genau wird "e:" gemappt - ist das eine Netzwerk-Freigabe?
    3) Welches Betriebssystem mit welchem Servicepack (alle Updates installiert) ?
    4) .NET Version scheint 4.0 zu sein (VS 2010)?
    5) Läuft es in meinem Original-Download-Projekt (also mit dem "logo.bmp") ?

    Wie Marcel vermute ich da eher Berechtigungs-Probleme.
    Checke hier (ggf.) genauestens die Informationen:

    [Verwenden der einfachen Dateifreigabe zum Freigeben von Dateien in Windows XP]
    http://support.microsoft.com/kb/304040

    [SO WIRD'S GEMACHT: Dateien und Ordner über das Netzwerk in einer Windows Server 2003 Domänenumgebung freigeben]
    http://support.microsoft.com/kb/324267
    siehe dort: ->"Lokal angemeldete Benutzer können nicht auf Dateien und Ordner zugreifen, obwohl dies möglich sein sollte ..."

     


    ciao Frank
    Montag, 24. Januar 2011 06:31
  • Hallo Frank,

     

    1) es gibt keine Fehlermeldung

    2) e: ist eine Festplattenpartion

    3) Win7 Premium x64/Alle Updates sind installiert

    4) Ist .Net 4.0 mit VS2010

    5) Nein

     

    Ich hoffe die Infos reichen aus.

     

    Gruss Franko

     

    Montag, 24. Januar 2011 06:40
  • Hallo Frank,

     

    ich habe mittlerweile Dein Projekt auf einer frischen Win7 Installation getestet. 

    Da wird nun auch bei mir das Bild angezeigt. Stellt sich nun die Frage bei mir,

    wo die Rechte Probleme auf meinen Entwicklungsrechner liegen koennen.

     

    Gruss Franko

    Montag, 24. Januar 2011 09:07
  • Hallo Franko,

    64 Bit kann es auch nicht sein. Ich habe das auf einem 64 Bit Server 2008 R2 getestet.

    Bei einem logischen Laufwerk kann man auch Rechte einstellen und vergeben.
    Hier ggf. ein hilfreiches Tool von Microsoft (aus der SysInternals-Suite) :

    [AccessEnum]
    http://technet.microsoft.com/de-de/sysinternals/bb897332

     


    ciao Frank
    Montag, 24. Januar 2011 09:24
  • Hallo Frank,

    folgendes habe ich noch getestet:

     

    1) "file:///e:/logo.bmp" wird korrekt im Browser angezeigt (sowie mit dem Pfad ueber Deine Variante)

    2) Dateirechte habe ich "Jeder/Benutzer/System/Administratoren" Vollzugriff gegeben (Bild wird nicht angezeigt)

    3) Lagere ich die Bilddatei auf irgendeinen Webserver aus, wird sie angezeigt

    4) Die Bilddatei wird auch nicht angezeigt, wenn sie auf einer FAT-Partition liegt

     

    Hast Du vielleicht noch eine Idee, warum es nicht funktioniert?

     

    Gruss Franko

    Montag, 24. Januar 2011 20:17
  • Hallo Frank,

    ja, dann liegt es sicher an Fat32! Mit den geforderten NTFS-Dateierechten kann FAT nichts anfangen.

    vorweg ... man nimmt ja heutzutage oft eher NTFS, da hier u.a. einfacher und wirkungsvoller den Benutzern verschiedene Rechte zugewiesen werden können.

    Zunächst musst bedenken, es gibt normal immer 2 Rechte-Aspekte:

    • Permissions on a Shared Folder
      Access on a shared folder is determined through two sets of permission entries; the permissions that are set on the share (called share permissions) and the permissions that are set on the folder (called NTFS file and folder permissions). Share permissions are often used for managing computers with FAT32 file systems or for managing other computers that do not use the NTFS file system.

      NTFS - Objekt kopieren auf eine FAT - Partition keine Rechtevergabe
      auf der selben Partition erbt die Eigenschaften des übergeordneten Ordners
      auf eine andere NTFS - Partition erbt die Eigenschaften des übergeordneten Ordners
      NTFS - Objekt verschieben auf eine FAT - Partition keine Rechtevergabe
      auf der selben Partition Eigenschaften bleiben erhalten
      auf eine andere NTFS - Partition erbt die Eigenschaften des übergeordneten Ordners
    • Fat32 hat keine "Dateisystemrechte"!
      Shared folders are stored on NTFS file system volumes.
      You can set permissions at the file level only if the files are stored on an NTFS volume.
      On a FAT or FAT32 volume, you can set permissions for shared folders but not for files and folders within a shared folder. Moreover, share permissions on a FAT or FAT32 volume restrict network access only, not access by users working directly on the computer.

    ... Share permissions are often used for managing computers with FAT32 file systems or for managing other computers that "do not use" the NTFS file system.

    Hier auch ein Detail-Vergleich von NTFS und FAT32:

    [File System Functionality Comparison (Windows)]
    http://msdn.microsoft.com/en-us/library/ee681827(VS.85).aspx

    woran Du erkennen kannst, dass FAT32 keine "Track file owner" und keine "Access control lists" (Zugriffskontroll-Listen) hat.


    ciao Frank
    Montag, 24. Januar 2011 22:11
  • Hallo Frank,

    oh da ist glaube ich nun ein Missverständnis entstanden. 

    Der oben von mir beschriebene 4) Punkt war nur ein verzweifelter Test, da FAT32 keine Dateisystemrechte hat.

    Normalerweise nutze ich NTFS und wie gesagt die FAT32 Partition war nur fuer diesen einen Test da. Die Idee kam 

    mir, da "param1.Add(new ReportParameter("PathL2", "http://www.irgendeinServer.de/logo.bmp);" funktionierte.

     

    Mal anders gefragt. Wenn dotnet auf das Dateisystem zugreift, benutzt es die Rechte des Angemeldeten Benutzers (also

    "rechnername/Benutzer" )?


    Gruss Franko

    Dienstag, 25. Januar 2011 04:57
  • Hallo Franko,
    Hallo Frank

    @Franko:

    Mal anders gefragt. Wenn dotnet auf das Dateisystem zugreift, benutzt es die Rechte des Angemeldeten Benutzers (also "rechnername/Benutzer" )?

    Was Sicherheit angeht, baut das .NET Framework auf die vom Betriebsystem angebotene Sicherheitsinfrastruktur auf (beinhaltet logon session, windows session boundaries, resource access control usw.).

    Mit WindowsIdentity.GetCurrent() kann man bestimmen, in welchem Anmeldungskontext die Anwendung aktuell läuft (heißt aber nicht implizit dass das entspr. Profil auch mitgeladen wurde).

    Ein .NET-Prozess ist ein Windows-Prozess. Deshalb gilt für ein .NET-Prozess alles, was auch für ein Windows-Prozess gilt u.a.:

    - eine .NET-Anwendung wird im Sicherheitskontext des angemeldeten Benutzers ausgeführt,
    - sie erbt den (seit Vista womöglich gefilterten) Token des Parent-Prozesses

    Was die NTFS-Zugriffsrechte angeht, muss man sich daran erinnern, dass Zugriffsverweigerungen Vorrang haben. Wenn also für eine Ressource Vollzugriff (über Gruppenzugehörigkeit oder Konto) gewährt wurde, die Ressource aber auch von übergeordneten Objekten ACEs erbt, die den Zugriff verweigern, dann wird der Zugriff auf die Ressource einfach nicht gewährt.

    In .NET 4.0 wurde die Codezugriffsicherheit (fast gänzlich) außer Kraft gesetzt und Methoden wie LocalReport.ExecuteReportInCurrentAppDomain gelten nun als veraltert. Da Dein Bericht anscheinend unter .NET 4.0 läuft (kannst Du das bestätigen), wird das ReportViewer-Steuerelement in der standardmäßig ge-sandbox-ten AppDomain ausgeführt. Das heißt aber auch, dass wenn die AppDomain - aus mir unbekannten Gründen - z.B. in der SecurityZone.Internet ausgeführt wird, der Zugriff auf Dateiressourcen über das file-Protokoll nicht zugelassen wird. Damit würde auch Dein Bild nicht angezeigt werden.

    Könntest Du bitte diesen Code im selben Codekontext, in dem auch EnableExternalImages gesetzt wird, ausführen und mir dann die Ergebnisse berichten:

    string currentWindowsUser = WindowsIdentity.GetCurrent().Name;
    Debug.WriteLine(String.Format("\nAktuell angemeldeter Benutzer: {0}", currentWindowsUser));
    
    string currentPrincipalType = Thread.CurrentPrincipal.GetType().ToString();
    Debug.WriteLine(String.Format("Principal-Typ: {0} ", currentPrincipalType));
    Debug.WriteLine(String.Format("Authentiziert: {0}", Thread.CurrentPrincipal.Identity.IsAuthenticated));
    
    Evidence evidences = AppDomain.CurrentDomain.Evidence;
    
    foreach (var evidence in evidences)
    {
     if (evidence is Zone)
     {
     Zone zone = evidence as Zone;
     Debug.WriteLine(String.Format("Zone: {0}", zone.SecurityZone));
     }
    }
    
    

    Gruß
    Marcel

    Dienstag, 25. Januar 2011 11:14
  • Hallo Marcel,

     

    der Bericht laeuft unter .Net 4.0.

     

    Hier die Ergebnisse:

    Aktuell angemeldeter Benutzer: rechner01\entwicklung

    Principal-Typ: System.Security.Principal.GenericPrincipal

    Authentiriert: False

    Zone: MyComputer

     

    Gruss Franko

    Dienstag, 25. Januar 2011 12:04
  • Hallo Franko,

    Hat denn der Benutzer entwicklung Vollzugriff auf die Datei e:\logo.bmp (über welche Gruppen)?
    Kannst Du aus der Berichtsanwendung heraus z.B. die Datei löschen (File.Delete(path))?

    Was passiert wenn Du als erste Zeile in Program.cs diese hier einfügst:

    AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
    


    Funktioniert der Aufruf von file:///e:/logo.bmp aus dem Internet Explorer?

    Gibt es irgendwelche Warnungen in Visual Studio bezügl. MIME-Types etc.?

    Und was ist mit den Sicherheitsoptionen der lokalen Richtlinien, gibt es da Unterschiede zu den Systemen, wo das Ganze funktioniert (z.B. 'Nur ausführbare Dateien heraufstufen, die signiert und überprüft sind')?
     

    Gruß
    Marcel

    Dienstag, 25. Januar 2011 13:29
  • Hallo Marcel,

     

    Hat denn der Benutzer entwicklung Vollzugriff auf die Datei e:\logo.bmp (über welche Gruppen)? 

    Ja der Benutzer hat Vollzugriff und gehoert der Gruppe Administratoren und Debuggeruser an.

     

    Kannst Du aus der Berichtsanwendung heraus z.B. die Datei löschen (File.Delete(path))?

    Ja kann ich.

     

    Was passiert wenn Du als erste Zeile in Program.cs diese hier einfügst:

     

    AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
    

    "Authentiriert: True" aendert sich dann von false auf true. Dein alter Code war noch aktive.

     


    Funktioniert der Aufruf von file:///e:/logo.bmp aus dem Internet Explorer?

    Ja funktioniert. Also das Bild wird angezeigt im IE.

     

    Gibt es irgendwelche Warnungen in Visual Studio bezügl. MIME-Types etc.?

     

    Gibt keine Warnungen.

     

    Und was ist mit den Sicherheitsoptionen der lokalen Richtlinien, gibt es da Unterschiede zu den Systemen, wo das Ganze funktioniert (z.B. 'Nur ausführbare Dateien heraufstufen, die signiert und überprüft sind')?

    Der Hauptunterschied ist, dass auf dem funktionierenden System bis auf Treiber und MS-Patche (fuer Win7) nicht viel weiteres installiert ist. 

     

    Gruss Franko

    Dienstag, 25. Januar 2011 17:05
  • Hallo Franko,

    Marcel schrieb: Kannst Du aus der Berichtsanwendung heraus z.B. die Datei löschen (File.Delete(path))?
    Franko schrieb: Ja kann ich.

    Gut. Dann kannst Du ja versuchen, das Bild in ein Bytearray einzulesen, dieses in ein Base64-String zu konvertieren und als Parameter an die Value-Eigenschaft zu binden.

    Image img = Image.FromFile(@"e:\\logo.jpg");
    
    string base64Logo = ConvertImageToBase64(img, ImageFormat.Jpeg);
    ReportParameter[] reportParams = new ReportParameter[2];
    reportParams[0] = new ReportParameter("ReportLogo", base64Logo); 
    reportParams[1] = new ReportParameter("ReportLogoMimeType", "image/jpeg"); 
    reportViewer1.LocalReport.SetParameters(reportParams); 
    

    Vollständiger Code unter:

    http://stackoverflow.com/questions/36693/how-can-i-render-a-png-image-as-a-memory-stream-onto-a-net-reportviewer-repor

    Hoffentlich klappt's diesmal.

    Gruss
    Marcel

    Dienstag, 25. Januar 2011 19:09
  • Hallo Franko,

    ich glaube, ihr seit gerade etwas vom richtigen "Pfad" abgekommen :-), das hat hier nichts mit dem Windows Principle zu tun. Auch, dass "file:///e:/logo.bmp" korrekt im Browser angezeigt wird, ist ja seit langem klar, aber das hatte Marcel sicher überlesen. Jetzt wird hier schon von Bytearray gesprochen, was natürlich keine Lösung für die Frage nach dem Pfad Download ist und nicht sein muss, denn es funktioniert mit Pfaden - nur durch Deine speziellen Rechte halt nicht. 

    Ein häufiger Fehler ist beim Setzen der Berechtigungen auf Shares zum Beispiel (ok, bei Dir ist es ein logisches Laufwerk) ist, dass man eben nicht das berücksicht, was ich hier geschrieben habe (aber wohl evtl. überlesen wurde) :

    es gibt normal immer 2 Rechte-Aspekte:

    • Permissions on a Shared Folder
      Access on a shared folder is determined through two sets of permission entries; the permissions that are set on the share (called share permissions) and the permissions that are set on the folder (called NTFS file and folder permissions).

    Also muss man zweimal Rechte vergeben/setzen! Auf dem Share und dem Ordner/Datei.

    - Mal ne Frage, wenn Du jetzt eine USB-Platte einsteckst, die z.B. auf H: gesetzt wird, funktioniert dann file:///H:/logo.bmp in meinem Projekt?

    - Die [AccessEnum] http://technet.microsoft.com/de-de/sysinternals/bb897332
    Frage blieb noch unbeantwortet. Wie sehen die Rechte bei e: denn wirklich aus? Wie unterscheiden sie sich gegenüber c:\ ?

    Wenn wir jetzt hier nicht weiterkommen, sollten wir das mal bei Microsoft Connect:

    [Feedback senden | Microsoft Connect]
    https://connect.microsoft.com/VisualStudio/feedback/CreateFeedbackForm.aspx?FeedbackFormConfigurationID=4367&FeedbackType=1

    am besten mit genau meinem Projekt und einen guten (englischen) Beschreibung einreichen. Microsoft wird dann antworten und ggf. Lösungen nennen.
    Das kann ich natürlich ggf. für Dich übernehmen. Nur habe ich nicht die Möglichkeit, den Fehler zu reproduzieren, denn auf meinen Rechnern/OS'en läuft es.


    ciao Frank
    Dienstag, 25. Januar 2011 19:42
  • Hallo Marcel,

     

    das Bild wird auch hier nicht angezeigt. Obwohl der Parameter das Bytearray enthaelt (hatte ich testweise mal in einem Textfeld ausgegeben). Den MimeType habe ich auch testweise direkt im Report gesetzt, aber funktioniert auch nicht.

     

    Gruss Franko

    Dienstag, 25. Januar 2011 20:06
  • Hallo Frank,

    > ich glaube, ihr seit gerade etwas vom richtigen "Pfad" abgekommen [...]

    Gut dass wir Dich haben, der uns den funktionierenden Pfad zeigt :-)

    > Auch, dass "file:///e:/logo.bmp" korrekt im Browser angezeigt wird, ist ja seit langem klar, aber das hatte Marcel sicher überlesen.

    Nein, habe ich nicht. Ich hatte schließlich die Frage danach gestellt.

    > Jetzt wird hier schon von Bytearray gesprochen, was natürlich keine Lösung für die Frage nach dem Pfad Download ist und nicht sein muss, denn es funktioniert mit Pfaden - nur durch Deine speziellen Rechte halt nicht.

    Scheint leider doch nichts mit Rechten zu tun zu haben - wie übrigens meine erste Vermutung war. Wenn Franko dem Steuerelement ein im Speicher befindliches Bytearray zuweist und das Bild dennoch nicht dargestellt wird... was meinst Du, was könnte das mit Rechten auf Shares zu tun haben?

    > Nur habe ich nicht die Möglichkeit, den Fehler zu reproduzieren

    Auch ich kann den Fehler nicht reproduzieren und der Fehler ereignet sich z.Z auch nur auf einem der Systeme von Franko. Der Code ist also sicherlich nicht schuld daran.

    Gruß
    Marcel

    Dienstag, 25. Januar 2011 20:47
  • Hallo Franko,

    Kannst Du den ReportViewer testhalber neu installieren?

    Microsoft Report Viewer 2010 Redistributable Package:
    http://www.microsoft.com/downloads/details.aspx?FamilyID=a941c6b2-64dd-4d03-9ca7-4017a0d164fd&displayLang=de

    Gruß
    Marcel

    Dienstag, 25. Januar 2011 20:53
  • Hallo Frank,

    > - Mal ne Frage, wenn Du jetzt eine USB-Platte einsteckst, die z.B. auf H: gesetzt wird, funktioniert dann file:///H:/logo.bmp in meinem Projekt?

    Nein funktioniert auch nicht

    > Frage blieb noch unbeantwortet. Wie sehen die Rechte bei e: denn wirklich aus? Wie unterscheiden sie sich gegenüber c:\ ?

    Bei c:\ sieht es so aus

    "Administratoren, Benutzer, NT-AUTORITÄT\Authentifizierte Benutzer" jeweils bei Read und Write

    Bei e:\

    "Jeder" bei Read und Write

    Gruss Franko

    Dienstag, 25. Januar 2011 21:57
  • Hallo Marcel,

    das neu installieren brauchte leider auch nichts.

     

    noch mal zu den Base64 Variante, die funktioniert auch an den 2. Rechner nicht.

     

    Gruss Franko

    Dienstag, 25. Januar 2011 22:05
  • Hallo Franko,

    noch mal zu den Base64 Variante, die funktioniert auch an den 2. Rechner nicht.

    Ich habe den mit Visual Studio 2010 kompilierten Code unter Windows 7 Premium und .NET 4.0 auf einem 64bit System getestet. Es klappte auf Anhieb. Ich habe den Test nun ein zweites Mal wiederholt: Das Bild wurde - wie im Originalartikel beschrieben - ohne Probleme angezeigt.

    P.S. Du musst Source auf Database nicht auf External/Embedded setzen!

    Gruss
    Marcel

    • Bearbeitet Marcel Roma Dienstag, 25. Januar 2011 22:41 Bemerkung
    Dienstag, 25. Januar 2011 22:35
  • Hallo Franko,

    Hier kommt die Berichtdefinition:

    <?xml version="1.0" encoding="utf-8"?>
    <Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition">
     <Body>
     <ReportItems>
      <Image Name="image1">
      <Source>Database</Source>
      <Value>=System.Convert.FromBase64String(Parameters!ReportLogo.Value)</Value>
      <MIMEType>=Parameters!ReportLogoMimeType.Value</MIMEType>
      <Sizing>FitProportional</Sizing>
      <Top>0.25cm</Top>
      <Left>0.25cm</Left>
      <Height>1.1791cm</Height>
      <Width>1.3969cm</Width>
      <Style />
      </Image>
     </ReportItems>
     <Height>9.94127cm</Height>
     <Style />
     </Body>
     <ReportParameters>
     <ReportParameter Name="ReportLogoMimeType">
      <DataType>String</DataType>
      <Prompt>ReportParameter1</Prompt>
     </ReportParameter>
     <ReportParameter Name="ReportLogo">
      <DataType>String</DataType>
      <Prompt>ReportParameter1</Prompt>
     </ReportParameter>
     </ReportParameters>
     <Width>12.94841cm</Width>
     <Page>
     <PageHeight>29.7cm</PageHeight>
     <PageWidth>21cm</PageWidth>
     <InteractiveHeight>11in</InteractiveHeight>
     <InteractiveWidth>8.5in</InteractiveWidth>
     <LeftMargin>2.5cm</LeftMargin>
     <RightMargin>2.5cm</RightMargin>
     <TopMargin>2.5cm</TopMargin>
     <BottomMargin>2.5cm</BottomMargin>
     <ColumnSpacing>1cm</ColumnSpacing>
     <Style />
     </Page>
     <Language>de-DE</Language>
     <ConsumeContainerWhitespace>true</ConsumeContainerWhitespace>
     <rd:ReportID>0329bb79-c4ec-4bc1-90d1-99b7b4392eb5</rd:ReportID>
     <rd:ReportUnitType>Cm</rd:ReportUnitType>
    </Report>
    

    Und der Code:

    private void Form1_Load(object sender, EventArgs e)
    {
     Image img = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg");
     string base64Logo = ConvertImageToBase64(img, ImageFormat.Jpeg);
     ReportParameter[] reportParams = new ReportParameter[2];
     reportParams[0] = new ReportParameter("ReportLogo", base64Logo); 
     reportParams[1] = new ReportParameter("ReportLogoMimeType", "image/jpeg"); 
     reportViewer1.LocalReport.SetParameters(reportParams); 
     this.reportViewer1.RefreshReport();
    }
    
    private static string ConvertImageToBase64(Image image, ImageFormat format) 
    { 
     byte[] imageArray; 
       
     using (System.IO.MemoryStream imageStream = new System.IO.MemoryStream()) 
     { 
      image.Save(imageStream, format); 
      imageArray = new byte[imageStream.Length]; 
      imageStream.Seek(0, System.IO.SeekOrigin.Begin); 
      imageStream.Read(imageArray, 0, (int)imageStream.Length); 
     } 
       
     return Convert.ToBase64String(imageArray); 
    }
    
    

    Gruss
    Marcel

    Dienstag, 25. Januar 2011 22:48
  • Hallo Marcel,

    es geht doch... Ich habe den falschen Report bei mir geaendert :-)

    Trotzdem komisch das die "Standard Variante" nicht klappt.

    Gruss Franko

    Dienstag, 25. Januar 2011 23:03
  • Hallo Franko,

    es geht doch [...] Trotzdem komisch das die "Standard Variante" nicht klappt.

    Das freut mich.

    Damit hast Du nun ein funktionierendes Workaround. Dass die Standard-Variante "nicht klappt" würde ich so nicht formulieren - schließlich funktionierte sie auf Deinem einen PC, auf Franks Rechner und auf meinem. Sie funktioniert nur nicht auf dem einen Rechner, warum auch immer.

    Gruss
    Marcel

    Dienstag, 25. Januar 2011 23:30
  • Hallo Marcel,

    es gibt aber wohl noch andere siehe:

    http://social.msdn.microsoft.com/Forums/en/vsreportcontrols/thread/1d33d6e8-2771-4b24-b41c-0f6c1bd6c6fe

    bei "dasprdav", welcher das gleiche Problem beschreibt.

    Gruss Franko

    Mittwoch, 26. Januar 2011 05:38
  • Hallo Franko,

    • Du schriebst: > bei C:\ sieht es so aus ...

    ja gut, aber die logo.bmp hat ja normal andere Rechte. 

    Bei mir übrigens folgende:

    H: Lesen:   Administratoren, Benutzer, NT-AUTORITÄT\SYSTEM
    C: Lesen:   Administratoren, Benutzer, NT-AUTHORITÄT\Authentifizierte Benutzer, NT_AUTHORITÄT\SYSTEM

    wie man weiss, gibt es ja je nach IE Version zum Teil Unterschiede je nach SP bzgl. des Browsings in die jeweilige Internet-Zone. So gilt ja: Internet Explorer 6 Service Pack 1 (SP1) no longer allows browsing a local machine from the Internet zone. Siehe:

    [file Protocol]
    http://msdn.microsoft.com/en-us/library/aa767731(VS.85).aspx

    Man könnte auch mal verschiedene unterstützte Schreibweisen der URL ausprobieren, denn diese verursachen, das ggf. eine andere Internet-Zone gewählt wird. Oder Du setzt mal die Internet Optionen wieder auf den Standard zurück.
    Das ganze könnte bei Dir auch durch Policies (IE 8) umgesetzt worden sein.

    wie gesagt - ansonsten sollte man bei Microsoft Connect eben ein Bericht aufmachen. Nur, wenn ich das mache, könnte ich nichts Reproduzierbaren vorweisen - deswegen solltest Du das machen - ich kann da höchstens helfen. Und Workarounds wird man viele finden, aber das beantwortet eben nicht die Original-Frage, die sicher später noch andere haben - insofern sollten wir das schon lösen.

     


    ciao Frank
    Mittwoch, 26. Januar 2011 06:19
  • Hallo Frank,

    > Man könnte auch mal verschiedene unterstützte Schreibweisen der URL ausprobieren, denn diese verursachen, das ggf. eine andere Internet-Zone gewählt wird.

    >Oder Du setzt mal die Internet Optionen wieder auf den Standard zurück. Das ganze könnte bei Dir auch durch Policies (IE 8) umgesetzt worden sein.

    Die Internet Optionen habe ich mal auf Standard zurueckgesetzt, aendert aber auch nichts. Installiert ist auf diesen System IE 8 Version: 8.8.7600.16385

     

    > wie gesagt - ansonsten sollte man bei Microsoft Connect eben ein Bericht aufmachen. Nur, wenn ich das mache, könnte ich nichts Reproduzierbaren vorweisen -

    > deswegen solltest Du das machen - ich kann da höchstens helfen. Und Workarounds wird man viele finden, aber das beantwortet eben nicht die Original-Frage, die

    > sicher später noch andere haben - insofern sollten wir das schon lösen.

    Sehe ich aehnlich. Wenn Du mir bei dem erstellen der Connect Anfrage helfen koenntest wuerde ich mich sehr freuen.

     

    Gruss Franko

    Mittwoch, 26. Januar 2011 07:19
  • Hallo Franko,

    Links könnte ich nach meiner gestrigen Recherche auch noch einige beisteuern. Nur ist leider keines von den gefundenen Beschreibungen reproduzierbar, manche Fehlfunktion beruht schlicht und ergreifend auf falschem Umgang mit dem Objektmodell. Und niemand wird sich die Zeit nehmen, einen Fehler zu beheben, der nicht reproduzierbar ist, zumal es funktionierende Workarounds gibt. Da müßte sich der Support erst mal auf Deinen Rechner schalten und wahrscheinlich viele Stunden damit verbringen, dem Fehler auf die Schliche zu kommen. Das wird zu teuer.

    Einen connect-Beitrag halte ich dennoch für sinnvoll. So könnte es der eventuelle Bug ins Backlog der Entwickler schaffen.

    Da mein letzter Beitrag einen funktionierenden Workaround anbietet, werde ich den Beitrag als (vorläufige) Antwort empfehlen.

    Gruß
    Marcel

    Mittwoch, 26. Januar 2011 07:45
  • Hallo Franko,

    • Frank schrieb:> sicher später noch andere haben - insofern sollten wir das schon lösen.

    • Franko schrieb: > Sehe ich aehnlich. Wenn Du mir bei dem erstellen der Connect Anfrage
      helfen koenntest wuerde ich mich sehr freuen.

    ja, mache ich gern. Freut mich auch.

    1) Gehe auf meinen Connect-Link:
    https://connect.microsoft.com/VisualStudio/feedback/CreateFeedbackForm.aspx?FeedbackFormConfigurationID=4367&FeedbackType=1

    2) Füge dort dort etwas wie folgendes ein (ersetze Betriessystem etc. gemäß Deinen Werten) :
      - kotrolliere meine Aussagen - füge ggf. noch etwas hinzu, wenn es wichtig ist.

    • Titel:
         Picture with file:///e:/logo.bmp not displayed in local Report, but file:///c:/logo.bmp
    • Zugriffsbeschränkungen:
         öffentlich
    • Beschreibung:
         In the attached project http://dzaebel.net/Downloads/WinReportImageDemo.zip the picture is shown. If i change the path to "e:\\logo.bmp" (in Form1.cs->Form1_Load - the picture really exists) the picture is not shown. (The real URL the Uri uses is file:///e:\logo.bmp). If i call file:///e:\logo.bmp in the IE 8 Browser, the picture is shown. On many PCs this work - Microsoft MVPs testet this for me. On their PCs it runs (the picture was shown) in Windows 7, Windows 2008 x64. But not on my PC. All Settings on my pc are standard including Internet Options.
    • Visual Studio/Silverlight/Tooling version:
         .NET Framework 4.0
    • Category:
          Security
    • Steps to reproduce the behavior:
      Open the attached project http://dzaebel.net/Downloads/WinReportImageDemo.zip press F5 -> the picture is shown. Change the path in Form1.cs in method Form_Load to "e:\logo.bmp" (the picture really exists), place the "logo.bmp" to e: . Result: the picture is not shown, but it should.
    • Operating System: Windows 7
    • Actual results:
          The picture (@"e:\logo.bmp") is not shown.
    • Expected results:
          The picture (@"e:\logo.bmp") should also be shown.

    ciao Frank
    Mittwoch, 26. Januar 2011 08:15
  • Hallo Frank,

     

    ich weiss nicht ob es wichtig, aber bevor ich den connect-Beitrag erstelle, das Bild wird bei mir nie im ReportViewer angezeigt. Also weder mit Deinen Projekt noch wenn das Bild woanders liegt (zb e:\logo.bmp). 

    Falls nicht aendere ich Deine Beschreibung entsprechend ab.

    Gruss Franko

     

     

     

     

    Mittwoch, 26. Januar 2011 08:37
  • Hallo Franko,

    ja, ändere es so ab, dass es 100% den von Dir beobachteten Zuständen entspricht.
    Am besten "übergenau". Poste den Connect-Link dann hier.
    Dein Link: http://social.msdn.microsoft.com/Forums/en/vsreportcontrols/thread/1d33d6e8-2771-4b24-b41c-0f6c1bd6c6fe
    wäre ggf. auch vorteilhaft.


    ciao Frank
    Mittwoch, 26. Januar 2011 08:54
  • Hallo Franko,

    danke für den Link und das Schreiben - ich denke wir beobachten jetzt die Reaktion von Microsoft hier (kann auch mal etwas dauern) und werden dann hier später die Lösung posten. Es kann auch sein, dass Microsoft Dich per Email kontaktiert - wichtige Infos sollten wir dann auch hier in Deutsch hereinschreiben.

    Müsste nicht eigentlich der Titel dann noch angepasst werden?
         "but file:///c:/logo.bmp"  stimmt doch dann nicht? Ggf. also einfach die Phrase weglassen.


    ___________________________

    aktueller Stand bei Frankos MS-Connect-Beitrag: 

    https://connect.microsoft.com/VisualStudio/feedback/details/638371/picture-with-file-e-logo-bmp-not-displayed-in-local-report-but-file-c-logo-bmp


    ciao Frank
    Mittwoch, 26. Januar 2011 09:47
  • Hallo Frank,

    Hallo Marcel,

     

    @Frank ich habe den Titel angepasst. 

    @Marcel danke das Du Connect-Betrag noch weiter ergaenzt hast.

     

    Gruss Franko

     

     

    Mittwoch, 26. Januar 2011 10:33
  • Hallo Franko,

    • > @Frank ich habe den Titel angepasst. 

    freut mich. Schaun wir mal, was Microsoft dazu antwortet.



    _____________

    ich poste mal trotzdem immer den Link hinten dran - für letzten aktuellen Stand.
    https://connect.microsoft.com/VisualStudio/feedback/details/638371/picture-with-file-e-logo-bmp-not-displayed-in-local-report-but-file-c-logo-bmp


    ciao Frank
    Mittwoch, 26. Januar 2011 11:00