![]() |
UAC-Stigma, UAC-kompatibel
Zuerst einmal schöne Grüße an alle, bin neu hier!
Es dauert immer sehr lange, bis ich mal in einem Forum poste, erst, wenn ich wirklich nicht mehr weiterkomme. Soweit ist es jetzt. Ausgangssituation: - Programm Patchwork ist eine sehr aufwendige und umfangreiche Applikation für Autoren - Geschrieben unter Delphi5 (ja, ich weiß, das XE6 wartet schon seit Monaten - keine Zeit) - Ich muss Patchwork so hinbekommen, dass keine lästigen UAC-Abfragen mehr auftreten - Entwicklung VMWare XP, Wirt Win 8.1, Test-VMWare Win 7 1. Herausforderung - wo ist der Haken? Wie komme ich dahinter, was UAC-Reklamationen auslöst? Dazu habe ich lange im Netz recherchiert. - Nachsehen, ob gewisse Wörter in der Applikation auftauchen (Update, Setup ...) > nein. - Schreibt das Prg. auf den Programmordner zu? Ja, auf Unterordner, aber nicht beim Start - HKCU-Zugriff > nein aus dem allen ergab sich dann die 2. Herausforderung - wie werde ich das UAC-Stigma los? Bei all diesen Vorgängen UAC auf Halbmast = vorletzter Raster von unten und dadurch ständige Admin-Abfragen, was ja klar ist. Entwicklung nicht auf dem Testrechner, sondern fertige Exe oder Setup immer zum Testrechner kopiert, um echte Anwendersituation zu simulieren - Also habe ich begonnen, die allererste Version von vor 2 Mannjahren - bei der auch schon die UAC anschlägt - zu entkernen. Dachte mir, wenn der kritische Part weg ist, wird es plötzlich klappen, wie das ja sonst so geht. Also zuerst mal Routinen ausgeremt und immer wieder probiert. Dann Controls entfernt. Dann alle Routinen entfernt. Dann uses-Klausel bis auf die 4,5 Mindestunits entleert. Fazit: UAC schlägt immer noch an. Hä? - Eine neue Exe gemacht (leeres Form mit ein par beliebigen Controls) und in dasselbe Verzeichnis (c:\Programme\Patchwork) kopiert > geht. - Dieselbe Exe mit dem Kopieren umbenannt in Patchwork.exe > UAC. *kopfkratz* - Patchwork.exe im Programmverzeichnis umkopiert auf Patch.exe > geht! - Patchwork.exe außerhalb umbenannt in Pat.exe und hineinkopiert > UAC. Fazit: Das Win7 scheint sich irgendwo zu merken, dass Patchwork.exe unkoscher ist und meckert vorsichtshalber ohne nachzusehen?? Frage: Wo kann ich das UAC-Stigma, das die exe Patchwork.exe offenbar hat, wieder entfernen? Denn so kann ich nicht testen, wann es passt und wann nicht. Für eure Unterstützung wäre ich sehr dankbar! Jik |
AW: UAC-Stigma, UAC-kompatibel
Es gibt z.B. ein Manifest, mit dem kann man Windows sagen was es machen soll.
Kennt man oftmals unter mehreren Namen, welche eine der möglichen Funktionen beschreibt, wie z.B. das "XP-Manifest", damit das Programm den "neuen" GUI-Style bekommt, oder "Admin-Manifest", damit es immer als Admin gestartet wird, und Vieles mehr. Wenn man ihm nichts sagt, dann wendet Windows gern mal Heuristiken an, um eventuell "richtig" reagieren zu können (siehe "Update" im Namen). Was genau alles geprüft wird, kann man schlecht sagen. (Dateiname, Beschreibung in den Dateieigenschaften, verwendete "statisch" eingebundene APIs, Dateisignaturen/Hashs ...) ![]() |
AW: UAC-Stigma, UAC-kompatibel
Zitat:
Darüber habe ich auch schon gelesen. Bevor ich mich hineinknie: kann man via Manifest angeben, dass z.B. nach der ersten Userbestätigung (noch besser ohne) keine Frage mehr kommen soll? Ich habe nämlich so die Befürchtung, dass das gar nicht geht, das würde dann ja auch jede Malware nutzen ... |
AW: UAC-Stigma, UAC-kompatibel
Nein, eine Frage komm immer, wenn UAC aktiv und noch höhere Rechte benötigt werden, denn sonst könnten sich Viren und Trojaner doch zu leicht alle Rechte besorgen. :zwinker:
Aber man kann z.B. sagen "nur mit normalen Rechten starten" (asInvoker) Hatte oben den falschen Link ... siehe Abschnitt/Menüpunkt "Sicherheit". |
AW: UAC-Stigma, UAC-kompatibel
Wenn dein Programm in seinem Programmverzeichnis schreibt, dann solltest du
MfG Dalai |
AW: UAC-Stigma, UAC-kompatibel
Ich kenne mich mit der Thematik auch nicht wirklich aus, aber ein verstehe ich nicht: Wie treten solche "Anfragen" denn aus heiterem Himmel auf?
Entweder deine Anwendung verlangt mittels diesem "Manifest" vor dem Ausführen nach höheren Rechten. Das sieht man im Explorer auch immer an diesem Schildsymbol. Oder es hat keine administrativen Rechte und wenn es Dinge versucht die es nicht kann (z.B. in C:\Programme schreiben) dann schlagen diese Dinge fehl. Aber es erscheinen nicht von alleine UAC-Abfragen. Oder habe ich etwas verpasst? |
AW: UAC-Stigma, UAC-kompatibel
Zitat:
Oder man gibt dem Ganzen von Anfabg an Admin-Rechte. |
AW: UAC-Stigma, UAC-kompatibel
Zitat:
![]() Zitat:
Wenn du in den Programmordner zu schreiben versuchst, benötigst du ab Windows Vista Admin-Rechte. Das dient der Sicherheit vor Viren und Malware. Ich würde an deiner Stelle einfach das jeweilige User-Verzeichnis als Speicherort wählen oder das Public-Verzeichnis. In letzteres kannst du ohne Einschränkungen schreiben, in das Verzeichnis des angemeldeten Uses kann natürlich nur dieser schreiben. Also statt das zu beschreibende Verzeichnis mit
Delphi-Quellcode:
zu wählen, nimmst du den entsprechenden "Specialfolder". Wie das genau geht, kannst du z.B.
MeinOrdner := ExtractFilePath(ParamStr(0));
![]() ![]() |
AW: UAC-Stigma, UAC-kompatibel
@Günther: Ja und nein. Du hast recht für den Fall, dass ein Programm kein Manifest hat, denn dann nimmt Windows an, dass das Programm nicht mit WinX kompatibel ist, und Schreibzugriffe auf geschützte Verzeichnisse werden auf den VirtualStore umgeleitet und es kommt keine UAC-Abfrage. Leider gibt's auch heutzutage noch solcherlei Software, sogar eine bekannte für Fluchtpläne :roll:.
Es gibt aber eine globale Microsoft Application Compatibility Database im Windows (*), in der für einige Programme Kompatibilitätseinstellungen stehen. Trifft man nun "durch Zufall" einen darin vermerkten Eintrag, kann das ebenfalls dazu führen, dass die UAC anspringt. So etwas ähnliches ist mir passiert, was mich selbst mehrere Tage Arbeit gekostet hat, um das überhaupt erstmal rauszufinden und schließlich zu beheben :roll:. Dann gibt es die bereits erwähnte "Heuristik", mit der Windows versucht zu ermitteln, ob ein Programm kompatibel ist (mit Vista, Win7, Win8 usw), anhand von Eigenschaften der EXE. (*) Wer es genau wissen will: diese DB findet man in der Datei %SystemRoot%\AppPatch\sysmain.sdb. Diese ist nicht veränderbar, man kann deren Einträge nur durch eine eigene (benutzerdef. DB) ergänzen und die festen DB-Einträge durch Registry-Einträge überstimmen/außer Kraft setzen. MfG Dalai |
AW: UAC-Stigma, UAC-kompatibel
Zitat:
|
AW: UAC-Stigma, UAC-kompatibel
Zitat:
|
AW: UAC-Stigma, UAC-kompatibel
Zitat:
|
AW: UAC-Stigma, UAC-kompatibel
Danke für eure Antworten bzw. das Willkommen!
Vielleicht habe ich mich nicht klar genug ausgedrückt, jedenfalls kam nicht unbedingt das an, was ich meinte. @Dalai, cookie22, Perlsau: Ich schreibe nicht ins Programmverzeichnis, sondern ein Unterverzeichnis. Dass das Rechte braucht ist klar und ich werde es ändern. Mach ich natürlich nicht gerne, denn die Änderung soll von den paar hundert Anwendern unbemerkt und fehlerfrei über die Bühne gehen. In so einem Fall versucht man vorher, alle anderen Möglichkeiten auszuschöpfen. Habe aber schon gemerkt, dass ich nicht drumherum komme; das ist aber auch nicht das Thema. @Der schöne Günther: Diese Anfrage ist nicht 'auf einmal' aufgetreten. Wenn UAC ein, dann immer @Perlsau: ![]() Zitat:
Zitat:
@ringli: Sorry, da hatte ich mich vertippt. War HKLM gemeint. Aber, wie gesagt, mache ich ja eben NICHT. Meine beiden Fragen waren: 1. Herausforderung - wo ist der Haken - Wie komme ich dahinter, was UAC-Reklamationen auslöst? Ich meine nicht, was es ist, denn das Schreiben, Registry usw. ist mir klar - schön wär's, wenn es so einfach wäre. Die Haupt-Unit des Programms hat 32.000 Zeilen Code, alle zusammen rund 120.000. Da schnell etwas zu finden ist nicht ganz ohne. Die Frage wäre, ob es Tools idealerweise für Delphi gibt, die debuggerlike zeigen, wann/wo die UAC zuschlägt. Ich kann es mir nämlich nicht vorstellen, wo ich so etwas provoziere. 2. Herausforderung - wie werde ich das UAC-Stigma los? Wenn ein Programm - in diesem Fall Patchwork.exe - einmal die orangefarbene UAC-Meldung ausgelöst hat, dann kann man bei dem Programm ändern was man möchte, die Meldung kommt trotzdem! Ich war sogar so weit gegangen, eine ganz neue leere exe zu machen und die unter dem Namen Patchwork.exe ins Programmverzeichnis zu kopieren und die löste es immer noch aus. Ich hab das aber eh oben beschrieben oben. Wie soll man dann kontrollieren, ob es nun funzt oder nicht? Jedes Mal pro Versuch die ganze jungfräuliche VMWare-Session neu rüberkopieren? Ist doch etwas mühsam, finde ich. Ich finde es total nett von euch, dass ihr mir Tipps gebt, aber wenn es geht, dann bitte auch zu den Fragen. Deshalb hatte ich mich auch bemüht es genau zu beschreiben. |
AW: UAC-Stigma, UAC-kompatibel
Zitat:
Zitat:
Zitat:
Zitat:
Code:
MfG Dalai
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags
|
AW: UAC-Stigma, UAC-kompatibel
Zitat:
|
AW: UAC-Stigma, UAC-kompatibel
Man sollte außerdem noch die Versionsinformationen der EXE überprüfen. Wenn dort, z.B. im Kommentar eines der Trigger-Wörter vorkommt wird die UAC auch ausgelöst!
|
AW: UAC-Stigma, UAC-kompatibel
Zitat:
Zitat:
Code:
HKEY_USERS\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
Zitat:
|
AW: UAC-Stigma, UAC-kompatibel
Zitat:
MfG Dalai |
AW: UAC-Stigma, UAC-kompatibel
Zitat:
|
AW: UAC-Stigma, UAC-kompatibel
Außerdem hat ein Manifest den Vorteil, dass die Anwendung die Themes von Windows nutzt und somit deutlich besser aussieht als ohne. Unter dem von dir ja in Wartestellung erwähnten XE6 ist das übrigens nur noch eine Einstellung in den Projektoptionen.
|
AW: UAC-Stigma, UAC-kompatibel
@Dalai und jaenicke: Danke für den zusätzlichen Anstupser zum Manifest! Funktioniert astrein und zudem, wie angedroht, ist die Optik besser!
Abgesehen davon ist mitsumis Manifest-Creator sehr elegant! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz