Problem mit #AutoIt3Wrapper_Res_ProductVersion=

  • Hallo AutoItler,

    wenn ich mit der alten AutoIt-Version 3.2.8.1 die Direktive #AutoIt3Wrapper_Res_ProductVersion= nicht im Quellcode bzw. in der AutoIt3Wrapper-GUI angegeben habe, ist selbige auch nicht den Versionsinformationen der kompilierten EXE hinzugefügt worden, bei der AutoIt-Version 3.3.14.5 hingegen schon.

    Zwar kann ich in der neuen AutoIt-Version die #pragma-Direktiven für Versionsinformationen verwenden, womit die des AutoIt3Wrappers inaktiv sind, aber dann kann ich den Sprachcode und selbst erstellte Freiformat-Felder nicht mehr festlegen. Der Sprachcode ist dann immer Englisch.

    Ich könnte auch jedes Mal den Resource Hacker bemühen, um die Produktversion zu entfernen, aber auf Dauer nervt das gewaltig. Eine andere Möglichkeit wäre die (halbautomatische) Erstellung einer Versionsinformationen-Ressourcendatei, was aber entweder unpraktisch in der Pflege ist oder ziemlich viel zusätzlichen Code benötigt.

    Hat jemand eine (recht) einfache nervenschonende Lösung, um die Produktversion aus den Versionsinformationen herauszuhalten? Das Studium und die Anwendung der Dokumentationen zu den #AutoIt3Wrapper- und #pragma-Direktiven führte mich leider nicht zum Erfolg.

    Gruß, fee

  • Hallo fee

    Ich verstehe dein Anliegen wahrscheinlich nicht, denn ich kann es nicht nachvollziehen.

    wenn ich mit der alten AutoIt-Version 3.2.8.1 die Direktive #AutoIt3Wrapper_Res_ProductVersion= nicht im Quellcode bzw. in der AutoIt3Wrapper-GUI angegeben habe, ist selbige auch nicht den Versionsinformationen der kompilierten EXE hinzugefügt worden, bei der AutoIt-Version 3.3.14.5 hingegen schon.

    Was wurde denn eingefügt? Immer Version 1? Wahrscheinlich nicht, sonst würdest du ja nichts vermissen.

    Grüße autoiter

  • Danke für deine Antwort, autoiter.

    Was aus meinem Text vermutlich nicht hervorgeht:

    Ich rede nicht von der ProductVersion (rechts vom =), sondern vom kompletten Eintrag ProductVersion, der in den Dateieigenschaften bzw. Versionsinformationen der kompilierten EXE-Datei eines selbstgeschriebenen AutoIt-Programms erscheint.

    Im Explorer von Windows XP SP3: Rechten Maustastenklick auf die EXE-Datei → Kontextmenüpunkt Eigenschaften → im sich öffnenden Eigenschaftenfenster den Reiter Version anklicken → Gruppe Versionsinformationen → Liste Elementname → den Eintrag Produktversion will ich dort nicht haben!

    Die Produktversion selbst wurde korrekt eingetragen und kann ich nach Belieben angeben/ändern, damit habe ich keine Probleme. Aber der gesamte Eintrag ist für mich halt überflüssig, wenn ich ein Programm geschrieben habe, das zur Ausführung nur aus dieser einen EXE-Datei besteht. Sinnvoller wäre da allerhöchstens ein Freiformateintrag namens AutoIt-Version, den ich auch schon Mal erfolgreich einprogrammiert hatte. Ich vermisse also nichts, sondern bekomme etwas zuviel!

    Seit der neuen AutoIt-Version wird vom AutoIt3Wrapper immer der ProductVersion-Eintrag gesetzt. Vielleicht ist da dem Programmierer des AutoIt3Wrappers ein Fehler unterlaufen oder hat dieses Verhalten aus irgendwelchen sonderbaren Gründen sogar so gewollt?

    Ich würde also "nur" gerne wissen, ob es einen einfachen nervenschonenden Weg/Trick gibt, diesen ProductVersion-Eintrag programmiertechnisch beim Kompilieren wegzulassen und ihn nicht erst nachher mit dem Resource Hacker entfernen zu müssen. Falls nicht, muss ich halt jedes Mal den Resource Hacker bemühen, (halbautomatisch) mit einer Ressourcendatei arbeiten oder gar den möglichen Fehler im AutoIt3Wrapper suchen und beheben. X/

    Gruß, fee

    5 Mal editiert, zuletzt von fee (30. November 2019 um 06:03)

  • Hallo fee

    ich fürchte das geht nicht so ohne weiteres. Aber ich will mich auch nicht zu weit aus dem Fenster lehnen. Andere hier kennen sich einfach besser aus.
    Mir fällt da zwar etwas ein, aber mit dem Vorschlag will ich lieber noch warten ^^

    Grüße autoiter

    • Offizieller Beitrag

    Kommentiere doch mal in der "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" die Zeile 14

    #AutoIt3Wrapper_Res_ProductVersion=2.2

    aus. Vielleicht ist damit schon dein Problem gelöst.

    ..und in der "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\Directives.au3" die Zeile 40 ebenfalls auskommentieren

    #AutoIt3Wrapper_Res_ProductVersion= ;Product Version

  • Nein, leider nicht, wie im ScreenShot zu sehen ist:

    Und das sind die Direktiven dazu:

    Abgesehen davon steht in meiner AutoIt3Wrapper.au3 die Direktive #AutoIt3Wrapper_Res_ProductVersion=2.2 in Zeile 13 im Gegensatz zu deiner. Meine AutoIt3Wrapper-Version ist Global Const $VERSION = "16.612.1119.0". Vielleicht ist das die falsche bzw. eine veraltete?

    Edit:

    Auch mit auskommentiertem #AutoIt3Wrapper_Res_ProductVersion= ;Product Version in der Directives.au3 bleibt es wie oben im ScreenShot.

    Würde mich ehrlich gesagt auch wundern, wenn das was bringen würde, denn dafür müsste ich die AutoIt3Wrapper.au3 doch kompilieren, oder nicht? Bei mir wurde die jedenfalls so "nackt" installiert und wird über die Registry passend aufgerufen, wenn auch über einen Pfadumweg: "c:\programme\autoit3\scite\..\autoit3.exe" "c:\programme\autoit3\scite\autoit3wrapper\autoit3wrapper.au3" /showgui /in "%l".

    Trotzdem vielen Dank für deine Mühe @BugFix! :)

    @autoiter: Was wäre denn nun dein Vorschlag?

    Gruß, fee

    7 Mal editiert, zuletzt von fee (27. November 2019 um 19:17)

    • Offizieller Beitrag
    Zitat

    Würde mich ehrlich gesagt auch wundern, wenn das was bringen würde, denn dafür müsste ich die AutoIt3Wrapper.au3 doch kompilieren, oder nicht? Bei mir wurde die jedenfalls so "nackt" installiert und wird über die Registry passend aufgerufen, wenn auch über einen Pfadumweg: "c:\programme\autoit3\scite\..\autoit3.exe" "c:\programme\autoit3\scite\autoit3wrapper\autoit3wrapper.au3" /showgui /in "%l".

    Das ist kein Umweg, sondern der normale Weg eine *. au3 ausführen zu lassen, indem man sie als Parameter der autoit3.exe übergibt.

    Kompilieren ist also nicht erforderlich.

  • @autoiter:

    Ich lese in diesem Forum zwar schon seit über 12 Jahren immer wieder mal mit, um eine Lösung, Idee oder Anregung zu finden oder manchmal auch, um Programme zu testen, aber bis heute weiß ich nicht, was PM oder PN genau heißt/ist. Da ich mich seit 2011 selten eingeloggt und somit die Menüführung nicht benötigt habe und mich in dieser damals leichter zurecht fand, weiß ich leider nicht, wo ich eine PN oder PM abrufen/einsehen kann.

  • @BugFix:

    Das weiß ich wohl: :)

    sondern der normale Weg eine *. au3 ausführen zu lassen, indem man sie als Parameter der autoit3.exe übergibt.

    aber mit "Umweg" meinte ich den Teil scite\..\ im AutoIt3-Programmpfad von "c:\programme\autoit3\scite\..\autoit3.exe" "c:\programme\autoit3\scite\autoit3wrapper\autoit3wrapper.au3" /showgui /in "%l", den man als Programmierer so normalerweise nicht in die Registry schreibt und zudem mindestens neun überflüssige Zeichen/Bytes kostest. ;)

  • ... aber bis heute weiß ich nicht, was PM oder PN genau heißt/ist.

    PN = "private Nachricht" (englisch PM = "private message" ;)

    Ein Bereich, z.B. innerhalb eines Forums, um eine nicht-öffentliche Konversation zwischen zwei Personen oder einer ausgewählten Gruppe von Usern zu führen (hat nichts mit E-Mail zu tun).

    -> DE-Forum -> siehe "Sprechblasen" im oberen Bereich der Website (hat autoiter bereits beschrieben).

    -> EN-Forum -> siehe Symbol "Briefumschlag" im oberen Bereich der Website, rechts neben der Glocke.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Auf "private message" und was es ist, bin ich nach @autoiters Hinweis und dem Beitreten der Konversation dann auch gekommen. :rolleyes:;) Ist viel leichter, als ich annahm.

    Dennoch danke ich dir, @Musashi, für die ausführlichen und ansehnlich aufbereiteten Informationen zur privaten Nachricht. :)

    Gruß, fee

    Einmal editiert, zuletzt von fee (28. November 2019 um 01:45)

  • Ich lese in diesem Forum zwar schon seit über 12 Jahren immer wieder mal mit, ...

    Hallo Fee, willkommen im Forum. :)

    Ich habe deine Beschreibungen durchgelesen und mir ist dennoch nicht klar, warum du den Eintrag "Produktversion" in den Dateieigenschaften der kompilierten EXE-Datei nicht haben willst. Deshalb schieße ich hier mal ins Blaue: Ist dir damit geholfen, den Eintrag auf "-" zu setzen? Das wäre auf jeden Fall einfach und nervenschonend. Unter Win 10 sieht das dann so aus:

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

  • Hallo Fee, willkommen im Forum. :)

    Endlich: Seit 2007 bis vorgestern hatte ich zwar erst fünf Beiträge in diesem Forum erstellt, aber du bist der erste, der mir das schreibt. Danke! :)

    Psst, "fee" sehe ich gerne kleingeschrieben. ;)

    mir ist dennoch nicht klar, warum du den Eintrag "Produktversion" in den Dateieigenschaften der kompilierten EXE-Datei nicht haben willst.

    Ganz einfach:

    • In der alten AutoIt-Version 3.2.8.1 konnte ich diese Direktive einfach weglassen und es wurde auch so umgesetzt. So sollte es ja wohl sein – beim Programmieren wie auch sonst im Leben: wenn man etwas bewusst weglässt, dann will man es nicht haben und auch nicht aufgezwungen bzw. automatisch mitgeliefert bekommen.
      Beispiel: Wenn du dir ein Fahrrad ohne Elektromotor kaufst, dann willst du bestimmt keines mit Elektromotor, nur weil es einfacher, bequemer oder es gar unwahrscheinlicherweise zum gleichen Preis angeboten wird. Umgekehrt ist es der gleiche Fall.
    • Das Programm bzw. die EXE-Datei hat ja schon eine Dateiversion und wenn sie nicht Teil eines größeren Projektes mit mehreren EXEn/DLLs ist, erschließt sich mir nicht der Sinn einer Produktversion.
    • Andere Programmiersprachen lassen dem Programmierer doch auch die freie Wahl, warum AutoIt nicht mehr?
    • Ich finde, wenn eine Programmiersprache etwas beherrscht hat, dann sollte es ihr nicht wieder genommen werden, sofern kein triftiger Grund dafür vorliegt.

    Ist dir damit geholfen, den Eintrag auf "-" zu setzen?

    Nein, denn ob der Inhalt des Produktversion-Eintrages nun "3.3.14.5", "0.8.0.0", "0.0.0.0" oder "-" lautet, ist mir im Prinzip relativ egal. Gut, im Sinne der Produktversion: "Nichts", "Keine" wäre es zwar ausreichend, aber eben nicht so sauber. Der Eintrag sollte besser ganz weg sein, da ich ihn für mich als überflüssig erachte. ;)

    Das wäre auf jeden Fall einfach und nervenschonend.

    Stimmt! Oder ich lasse einfach alles, wie es ist und kümmere mich nicht mehr darum (sondern lieber um den eigentlichen Programmcode), was aber dieses ganze Thema überflüssig macht. :S

    Trotzdem vielen Dank für deinen Vorschlag, @Professor Bernd. :)

    @all:

    Bisher konnte mir bedauerlicherweise keiner eine nicht allzu ausufernde funktionierende Lösung dafür geben, weil es wahrscheinlich auch gar keine solche gibt – bis auf die Anwendung von #AutoIt3Wrapper_Run_After=-Direktiven zusammen mit dem Resource Hacker* oder der manuellen Korrektur in selbigem.

    Daher wäre es schön und nett, wenn jemand, der im Gegensatz zu mir aus dem Stegreif gutes Englisch von sich geben kann, den (Chef-)Programmierer von AutoIt darauf aufmerksam machen könnte, damit er die Möglichkeit bekommt, diesen bestimmt nicht allzugroßen Fehler im AutoIt3Wrapper zu beheben. Es gibt sicher dringlichere Probleme in AutoIt, aber versuchen kann man es ja Mal.

    Oder hat die Produktversion eine tiefere Bewandtnis, die sich mir nicht erschließt bzw. ich nicht verstehe?


    Gruß, fee

    * Deren Zusammenspiel habe ich noch nicht ganz zum fehlerfreien Funktionieren gebracht, denn die Einträge der Zeilen 3 und 4

    landen kurioserweise als einzige nicht in der Resource.rc-Datei, auch ohne Maskierung der Kommas mit ^. Mit in doppelten Anführungszeichen eingeschlossenen Versionsnummern werden auch die Zeilen 3 und 4 ausgegeben, aber der Resource Hacker kann diese Datei dann nicht verarbeiten.

    Irgendwie scheint der AutoIt3Wrapper bezüglich den Direktiven recht fehlerbehaftet zu sein.

    9 Mal editiert, zuletzt von fee (30. November 2019 um 06:18)

    • Offizieller Beitrag

    Daher wäre es schön und nett, wenn jemand, der im Gegensatz zu mir aus dem Stegreif gutes Englisch von sich geben kann, den (Chef-)Programmierer von AutoIt darauf aufmerksam machen könnte, damit er die Möglichkeit bekommt, diesen bestimmt nicht allzugroßen Fehler im AutoIt3Wrapper zu beheben.

    Ich habe mal probiert: Das Problem ist nicht der Wrapper. Den benötigt man ja auch grundsätzlich nicht, ist nur ein Tool zur Vereinfachung.

    Wenn man selbst kompiliert ist das Feld "Produktversion" enthalten. Das wird beim Kompilieren über die "Aut2exe.exe" erstellt.

    zum Testen ein beliebiges Skript (hier "msgbox.au3") direkt kompilieren:

    AutoIt
    Local $sInFile = "C:\CODE\AutoIt\TEST\msgbox.au3"
    Local $Aut2Exe = StringReplace(@AutoItExe, "AutoIt3.exe", "Aut2Exe\Aut2exe.exe")
    
    ; "Aut2exe.exe / In < infile.au3 >[/out < outfile.exe >][/icon < iconfile.ico >][/comp 0 - 4][/nopack][/x64][/bin < binfile.bin >] "
    Local $sCmd = StringFormat("%s /in %s", $Aut2Exe, $sInFile)
    
    Run($sCmd)

    Eigenschaften Datei:

    Somit sind Änderungen nur in der fertigen exe mittels Ressource-Hacker möglich.

  • zum Testen ein beliebiges Skript (hier "msgbox.au3") direkt kompilieren:

    Folge ich deiner Anleitung, steht bei mir gar nichts in den Eigenschaften:

    Auch im Resource Hacker sind nur die minimalen Versionsinformationen eingetragen:

    Ist auch irgendwie logisch, denn beim direkten Kompilieren wird bei mir aus der Registry heraus nur der Befehl "C:\Programme\AutoIt3\Aut2Exe\Aut2Exe.exe" /in "%l" ausgeführt, also nur mit dem Parameter /in "%i", der laut englischer Hilfe zusammen mit einem Dateipfad angegeben werden muss, weil er keinen Standardwert hat. Die Standardwerte der anderen Parameter tasten die Versionsinformationen eigentlich nicht an. Warum das bei dir so ist, verstehe ich aber nicht. Vielleicht ein anderer Registrybefehl?

    Deiner Erkenntnis

    Somit sind Änderungen nur in der fertigen exe mittels Ressource-Hacker möglich.

    kann ich leider nicht (ganz) zustimmen, denn Aut2Exe.exe hat keinen /language-Parameter, die Sprache der Versionsinformationen kann aber dennoch vom AutoIt3Wrapper verändert werden. Also fügt dieser der kompilierten EXE die angepassten Versionsinformationen wohl selbst hinzu. Die Funktionen _Res_Create_RTVersion() ab Zeile 1618 und _Res_Update() ab Zeile 1780 in der AutoIt3Wrapper.au3 bestätigen meine Vermutung, denke ich, auch wenn ich sie nur etwas genauer überflogen habe und bestimmt nicht zu 100% im Detail verstehen würde. Außerdem hat Aut2Exe.exe auch keinen äquivalenten Parameter für die #AutoIt3Wrapper_Res_Field=-Direktive, mit der bis zu 15 beliebig benannte Felder in die Versionsinformationen eingetragen werden können.

    Dieser ganze Käse kann einem Kopfschmerzen bereiten, nicht wahr? :Face:

    Aber danke, dass du dich bemühst, mir zu helfen, auch wenn ich vielleicht zuviel oder nervig schreibe. :)

    Gruß, fee

    Einmal editiert, zuletzt von fee (29. November 2019 um 22:53)

  • Hi fee !

    Idee - ungetestet - , da mich das Feld 'Produktversion' nicht stört - ich finde es eher ganz nützlich ;):

    Der Resource Hacker kann ja auch über Kommandozeilenparameter gesteuert werden.

    Vorausgesetzt es gibt ein Flag/einen Switch zum Entfernen des Eintrages 'Produktversion' :

    Dann könnte man sich doch ein Skript/eine .CMD schreiben, welches eine Dateiliste 'en bloc' abarbeitet um die Sache etwas komfortabler zu gestalten.

    Angesichts der Tiefe Deiner bisherigen Versuche, hast Du diese Option wahrscheinlich aber schon selbst in Betracht gezogen bzw. verworfen ;).

    (Zu : Willkommen im Forum von Professor Bernd ) :

    Endlich: Seit 2007 bis vorgestern hatte ich zwar erst fünf Beiträge in diesem Forum erstellt, aber du bist der erste, der mir das schreibt.

    Mir wäre gar nicht der Gedanke gekommen, Dich nach 12 Jahren !! im Forum willkommen zu heißen (und anderen wohl auch nicht) ^^.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Mir wäre gar nicht der Gedanke gekommen, Dich nach 12 Jahren !! im Forum willkommen zu heißen (und anderen wohl auch nicht) ^^ .

    ^^ Ich fand's erfreulich schön und nach all der Zeit war es mir rührend-wohlig dabei. Dein Kommentar hat mich jetzt obendrein noch herzhaft lachen lassen. Besser geht's doch nicht! :)

    Vorausgesetzt es gibt ein Flag/einen Switch zum Entfernen des Eintrages 'Produktversion' :

    Nein, so einen Flag/Switch besitzt der Resource Hacker leider nicht, denn sonst hätte ich ihn schon längst getestet/verwendet und wäre mit meinen #AutoIt3Wrapper_Run_After=-Direktiv-Versuchen schon viel weiter oder gar am Ziel.

    Dann könnte man sich doch ein Skript/eine .CMD schreiben, welches eine Dateiliste 'en bloc' abarbeitet um die Sache etwas komfortabler zu gestalten.

    Wie du richtig vermutet hast, kam mir den Gedanke auch, ist aber leider nicht mit dem Resource Hacker durchführbar. Mit AutoIt, einigem Code aus dem AutoIt3Wrapper und viel Aufwand könnte es jedoch gelingen.

    Bevor ich mich aber an solch ein Projekt wage, verfolge ich erst meine Direktive-Versuche weiter, warte dabei auf weitere Vorschläge hier und wenn ich die Direktiven nicht übersichtlicher/komfortabler gestaltet bekomme, dann ziehe dennoch die direkte Fehlerbereinigung im AutoIt3Wrapper vor. Dazu kann ich mir jetzt schon sagen: Prost, Mahlzeit! =O

    Allerdings bin ich in dieser Sache langsam am Ende meiner Geduld, denn das Zeit-Nutzen-Verhältnis ist schon bei Weitem eher in der Senkrechten als in der Waage(rechten). ;)

    da mich das Feld 'Produktversion' nicht stört - ich finde es eher ganz nützlich

    Und für was findest du es nützlich, wenn ich fragen darf? Wie verwendest du es bzw. mit welchem Wert lässt du es füllen?

    Auch dir danke ich für deine Bemühung, @Musashi! :)

    Gruß, fee

    2 Mal editiert, zuletzt von fee (30. November 2019 um 06:22)

  • Allerdings bin ich in dieser Sache langsam am Ende meiner Geduld, denn das Zeit-Nutzen-Verhältnis ist schon bei Weitem eher in der Senkrechten als in der Waage(rechten). ;)

    Das sehe ich genauso.

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.