Manifest Struktur bei unterschiedlichen Windows und VS Versionen Unscharfe Darstellung mit Winforms

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Snake3000.

    Manifest Struktur bei unterschiedlichen Windows und VS Versionen Unscharfe Darstellung mit Winforms

    Hallo Gemeinde,

    ich habe eine kleine Anwendung fertiggestellt und versuche sie nun mit einem erstellten Setup auf einem anderen Rechner zu installieren.
    Dabei sind folgende zwei Rechner im Spiel:

    Rechner 1: Win10, 64-bit, Visual Studio 2017 v15.7.6
    Rechner 2: Win7, 32-bit, Visual Studio 2017 v15.7.1

    Programmiert habe ich diese Winforms Anwendung im Framework 7.6.1 .

    Hier im Forum habe ich gelernt das zwei Änderungen in dem Manifest und der App.config die Darstellungs Qualität verbessern.

    In der App.config

    XML-Quellcode

    1. <appSettings>
    2. <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    3. </appSettings>


    und im App.manifest

    XML-Quellcode

    1. <application xmlns="urn:schemas-microsoft-com:asm.v3">
    2. <windowsSettings>
    3. <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    4. </windowsSettings>
    5. </application>


    Klappt gut und ist empfehlenswert. Ich habe es auf meinem Rechner 1 wie folgt in dem originalen von VS erstelltem Manifest eingebaut:

    Spoiler anzeigen
    ,

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
    3. <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
    4. <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    5. <security>
    6. <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
    7. <!-- UAC-Manifestoptionen
    8. Wenn Sie die Ebene der Benutzerkontensteuerung für Windows ändern möchten, ersetzen Sie den
    9. Knoten "requestedExecutionLevel" wie folgt.
    10. <requestedExecutionLevel level="asInvoker" uiAccess="false" />
    11. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    12. <requestedExecutionLevel level="highestAvailable" uiAccess="false" />
    13. Durch Angabe des Elements "requestedExecutionLevel" wird die Datei- und Registrierungsvirtualisierung deaktiviert.
    14. Entfernen Sie dieses Element, wenn diese Virtualisierung aus Gründen der Abwärtskompatibilität
    15. für die Anwendung erforderlich ist.
    16. -->
    17. <requestedExecutionLevel level="asInvoker" uiAccess="false" />
    18. </requestedPrivileges>
    19. </security>
    20. </trustInfo>
    21. <application xmlns="urn:schemas-microsoft-com:asm.v3">
    22. <windowsSettings>
    23. <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    24. </windowsSettings>
    25. </application>
    26. <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    27. <application>
    28. <!-- Eine Liste der Windows-Versionen, unter denen diese Anwendung getestet
    29. und für die sie entwickelt wurde. Wenn Sie die Auskommentierung der entsprechenden Elemente aufheben,
    30. wird von Windows automatisch die kompatibelste Umgebung ausgewählt. -->
    31. <!-- Windows Vista -->
    32. <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
    33. <!-- Windows 7 -->
    34. <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
    35. <!-- Windows 8 -->
    36. <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
    37. <!-- Windows 8.1 -->
    38. <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
    39. <!-- Windows 10 -->
    40. <!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
    41. </application>
    42. </compatibility>
    43. <!-- Gibt an, dass die Anwendung mit DPI-Werten kompatibel ist und von Windows nicht automatisch auf höhere
    44. DPI-Werte skaliert wird. WPF-Anwendungen (Windows Presentation Foundation) sind automatisch mit DPI-Werten kompatibel und müssen sich nicht
    45. anmelden. Für Windows Forms-Anwendungen für .NET Framework 4.6, die sich für diese Einstellung anmelden, muss
    46. auch die Einstellung "'EnableWindowsFormsHighDpiAutoResizing" in der "app.config" auf "true" festgelegt werden. -->
    47. <!--
    48. <application xmlns="urn:schemas-microsoft-com:asm.v3">
    49. <windowsSettings>
    50. <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    51. </windowsSettings>
    52. </application>
    53. -->
    54. <!-- Designs für allgemeine Windows-Steuerelemente und -Dialogfelder (Windows XP und höher) aktivieren -->
    55. <!--
    56. <dependency>
    57. <dependentAssembly>
    58. <assemblyIdentity
    59. type="win32"
    60. name="Microsoft.Windows.Common-Controls"
    61. version="6.0.0.0"
    62. processorArchitecture="*"
    63. publicKeyToken="6595b64144ccf1df"
    64. language="*"
    65. />
    66. </dependentAssembly>
    67. </dependency>
    68. -->
    69. </Assembly>
    ,


    Zeilen 21 bis 25. Sieht zwar, für meine schmalen XML Kenntnisse, seltsam aus, da es nun zwei Application Blöcke gibt, aber was solls, es läuft ja.
    Witzigerweise stehen auskommentiert in den Zeilen 48 bis 52 original die gleichen Befehle als Vorschlag.

    Und nun kommen wir auch endlich zu meinem Problemchen:

    Ich habe auf meinem Rechner 1 mit Veröffentlichen ein Installations Setup erstellt. Bei der Installation auf meinem Rechner 2 bekomme ich die Meldung das die Anwendung falsch formatiert ist. Und im Detail wird gesagt das Manifest ist fehlerhaft oder kann nicht geöffnet werden.

    Wie erwähnt kann man sehen das der "neue" zweite Application Block vor dem Beginn des Compatibility Blocks steht.

    Jetzt habe ich diesen "neuen" Block in den vorhandenen Application Block, der in dem vorhandenen Compatibillity Block steht gelegt...

    Also so:
    Spoiler anzeigen
    ,

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
    3. <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
    4. <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    5. <security>
    6. <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
    7. <!-- UAC-Manifestoptionen
    8. Wenn Sie die Ebene der Benutzerkontensteuerung für Windows ändern möchten, ersetzen Sie den
    9. Knoten "requestedExecutionLevel" wie folgt.
    10. <requestedExecutionLevel level="asInvoker" uiAccess="false" />
    11. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    12. <requestedExecutionLevel level="highestAvailable" uiAccess="false" />
    13. Durch Angabe des Elements "requestedExecutionLevel" wird die Datei- und Registrierungsvirtualisierung deaktiviert.
    14. Entfernen Sie dieses Element, wenn diese Virtualisierung aus Gründen der Abwärtskompatibilität
    15. für die Anwendung erforderlich ist.
    16. -->
    17. <requestedExecutionLevel level="asInvoker" uiAccess="false" />
    18. </requestedPrivileges>
    19. </security>
    20. </trustInfo>
    21. <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    22. <application>
    23. <!-- Eine Liste der Windows-Versionen, unter denen diese Anwendung getestet
    24. und für die sie entwickelt wurde. Wenn Sie die Auskommentierung der entsprechenden Elemente aufheben,
    25. wird von Windows automatisch die kompatibelste Umgebung ausgewählt. -->
    26. <!-- Windows Vista -->
    27. <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
    28. <!-- Windows 7 -->
    29. <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
    30. <!-- Windows 8 -->
    31. <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
    32. <!-- Windows 8.1 -->
    33. <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
    34. <!-- Windows 10 -->
    35. <!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
    36. <application xmlns="urn:schemas-microsoft-com:asm.v3">
    37. <windowsSettings>
    38. <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    39. </windowsSettings>
    40. </application>
    41. </application>
    42. </compatibility>
    43. <!-- Gibt an, dass die Anwendung mit DPI-Werten kompatibel ist und von Windows nicht automatisch auf höhere
    44. DPI-Werte skaliert wird. WPF-Anwendungen (Windows Presentation Foundation) sind automatisch mit DPI-Werten kompatibel und müssen sich nicht
    45. anmelden. Für Windows Forms-Anwendungen für .NET Framework 4.6, die sich für diese Einstellung anmelden, muss
    46. auch die Einstellung "'EnableWindowsFormsHighDpiAutoResizing" in der "app.config" auf "true" festgelegt werden. -->
    47. <!--
    48. <application xmlns="urn:schemas-microsoft-com:asm.v3">
    49. <windowsSettings>
    50. <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    51. </windowsSettings>
    52. </application>
    53. -->
    54. <!-- Designs für allgemeine Windows-Steuerelemente und -Dialogfelder (Windows XP und höher) aktivieren -->
    55. <!--
    56. <dependency>
    57. <dependentAssembly>
    58. <assemblyIdentity
    59. type="win32"
    60. name="Microsoft.Windows.Common-Controls"
    61. version="6.0.0.0"
    62. processorArchitecture="*"
    63. publicKeyToken="6595b64144ccf1df"
    64. language="*"
    65. />
    66. </dependentAssembly>
    67. </dependency>
    68. -->
    69. </Assembly>
    ,


    Zeile 36 bis 42. Ok, nun also zwei verschachtelte Application Blöcke.
    Erstelle ich nun so ein Setup mit meinem Rechner 1, dann kann ich es problemlos auf meinem Rechner 2 installieren.

    Dummerweise läuft es dann aber nicht mehr auf meinem Rechner 1 wie vorher. Diese Befehle werden offenbar ignoriert. Das Programm läuft zwar, aber die Darstellung sieht wieder scheixxe aus.

    Was nun tun???

    Heisst es das ich nun zwei Versionen brauche??? Und was kommt noch auf mich zu beim Testen auf meinem Rechner 2?
    Hat da jemand Erfahrungen mit?

    Snake3000 schrieb:

    Was nun tun???
    Offne mal diese Datei im Notepad++ und lass sie im XML-Format darstellen.
    Klapp die inneren Nodes zusammen, dann erkennst Du, wo Dein zusätzlicher Node rein muss:

    Wenn Du den Code in einem inneren Bereich einfügst, funktioniert das nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi Rod,

    leider kann ich keine Erfolge vermelden.

    In meinem originalem Manifest habe ich neben ​<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> und <application xmlns="urn:schemas-microsoft-com:asm.v3">​ auch noch <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> ​ in der Ebene 1.

    Und genau so funzt es auch unter Win10.
    Leider nicht unter Win7.

    Problemchen bleibt. Und ich habe wahrlich nun alle Variationen exzessiv durchgetestet.

    Wenn keiner noch einen Zaubertrick aus dem Ärmel holt... müssen wir uns wohl oder übel damit abfinden, dass ich zu blöde dafür bin. 8|

    Snake3000 schrieb:

    Leider nicht unter Win7.
    Kannst Du mal ein kleines Testprojekt erstellen, das Deinen Effekt reproduziert?
    Ohne Binaries (ojj, bin) zippen und anhängen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Snake3000 schrieb:

    ohne bin und obj
    Die spammen nur den Forums-Server voll, außerdem werden die beim Build erzeugt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo zusammen,

    hier meine zwei Beispiele. Aus logistischen Gründen dieses mal auf dem Rechner 2 (Win7) erstellt. Ändert am Ergebnis nix. :-/

    Vorsicht nicht von den Namen verwirren lassen:
    VBPtestSe1 - ist die Version die Win7 nicht installiert. Wohl aber Win10 mit scharfer Darstellung.
    VBPtestSe2 - ist die Version die korrekt von Win7 installiert wird. Ebenso Win10, aber mit unscharfer Darstellung.

    ACHTUNG: in den ZIP Verzeichnissen heissen beide VBPtestSe1 !!!!!!! da ich die gleiche Lösung verwendet habe und nur das Manifest geändert habe.

    Beide natürlich artig ohne bin und obj, macht ja auch Sinn. :saint:

    Ich bin gespannt wie ein Flitzebogen...
    Übrigens, schon mal vorab meine unendliche Dankbarkeit das Ihr euch so viel Mühe macht.
    Dateien
    • VBPtestSe1.zip

      (355,8 kB, 83 mal heruntergeladen, zuletzt: )
    • VBPtestSe2.zip

      (444,3 kB, 87 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Snake3000“ () aus folgendem Grund: normaler Blödheit :-)

    Hallo Gemeinde,

    nur der Vollständigkeit halber, noch mal eine Meldung von mir.
    Also ich habe nix schlaues mehr gefunden und sämtliche Versuche sind fehlgeschlagen.

    Gedanklich habe ich mich immer mehr daran gewöhnt das es nix mehr wird.

    Da keiner den berühmten Zaubertrick im Ärmel hat, war es das wohl...

    Trotzdem danke für euer Interesse.