![]() |
ein Fass nach dem anderen geht auf
Woanders schrieb ich
Zitat:
Ich habe ein Programm entwickelt. Das hat begonnen vor über 30 Jahren mit Turbo-Pascal 3.0 und ist inzwischen bei Delphi Berlin. Es gibt viele Produkte (>100) die auf der Software basieren und man kann alle miteinander auch kombinieren. In ca. 99% der Fälle sind es einzelne PCs, es gibt aber auch Installation in Netzwerken und virtualisierten Umgebungen. Geliefert wurde das Programm früher auf Diskette, dann CD. Inzwischen gibt es auch die Möglichkeit einer Neu- oder Updateinstallation vom Internet. Seit einigen Jahren betreue ich das Projekt nur noch in meiner Freizeit. Früher wurde das Programm installiert in einen beliebigen Windowsordner z.B. C:\BlaFasel. Das Hauptprogramm hat auf Bedarf noch Dateien nachinstalliert, geändert und Einstellungen in Ini-Dateien geschrieben und diese auch in diesem Ordner abgelegt. Es gab keine Deinstallation, wenn man es loswerden wollte hat man einfach den Ordner gelöscht. So weit so gut - oder eben auch nicht. Wenn man heutzutage das dann in den Windows Programmordner installieren möchte gibt es natürlich Probleme. Das will ich seit einiger Zeit in Ordnung bringen. Also 1. Fass: Dateien in die jeweiligen Ordner verteilen. Programmdateien in %ProgramFiles%, Anwendungsdaten in CSIDL_APPDATA, Anwenderdaten in CSIDL_PERSONAL oder so ähnlich. Zum Deinstallieren dann einfach den Ordner löschen ist dann nicht mehr möglich. Also 2. Fass: Ein Deinstallationsprogramm muss her. Das ist weitgehend wie Wasser kochen. Aber das Deinstallationsprogramm muss dann auch bei Windows eingetragen werden. Das geht ja noch aber, aber Widnos mag das nicht so einfach. Also 3. Fass: Setup muss Deinstallation mit Administratorrechte eintragen. Nach wie vor muss aber das Übrige mit "normalen" Rechten laufen. Dazu muss das Programm mit Administratorrechte etwas mitteilen. Also 4. Fass: Interprozesskommunikation. Da bin ich nun (Dazwischen kamen noch die Fässer: Signierung mit Zertifikate und Manifeste) Seit fünf Monaten mache ich nun daran rum, dass man das Programm in den Windows Programmordner installieren. Und nach jedem Fass geht ein neues auf. Was mache ich falsch? Dann bitte ich im Informationen. Oder ist das halt so ein komplexes Thema? Dann bitte ich um Beileidsbekundungen ;-) (Und Beiträge von Kathinka sind auch erwünscht.) |
AW: ein Fass nach dem anderen geht auf
InnoSetup?
Da geht das doch relativ einfach |
AW: ein Fass nach dem anderen geht auf
Den Pfad zu Deinen Dateien könntest Du doch mit System.SysUtils.GetHomePath ermitteln.
Nachinstallieren von runtimes ist natürlich schwierig - ich würde ich einfach ein Innosetup script verwenden welches dann im selben Pfad Deine module schreibt. Es wird dies automatisch tun, wenn Du den selben "AppName" verwendest. InnoSetup ist super. Ich verwende allerdings eine ältere Version da der Windows Defender bei der neuen gemotzt hat. |
AW: ein Fass nach dem anderen geht auf
%APPDATA% ist das neue C:\. Viele Programme installieren sich heute in %APPDATA%. Chrome und Firefox (non-ESR), auch Entwickler-Sachen wie Sourcetree. Weder zur Installation noch Deinstallation braucht man Rechte. Dass das ganze Programm dann in einer Domäne bei jedem Login und Logout mit einem Server gesynct wird - drauf geschissen. Die haben wohl auch alle keinen Bock darauf, ihr Programm vernünftig zu schreiben und anzupassen.
|
AW: ein Fass nach dem anderen geht auf
Ach so ist das. Das habe ich sogar schon bei einem Microsoft-Tool so gesehen. :wall:
@jziersch: das Fass habe ich schon geleert @MyRealName: InnoSetup u.a. taugen für mich nicht. Spätestens bei der Deinstallation ist das das Problem, dass die gar nicht wissen (können) welche Dateien alle weg müssen. Das hängt sehr von der Art der Instllation und weiss allein mein Code. Klar, auch mit den Tools kann man scripten, aber dann muss ich ja wieder das lernen. Zu Beginn hat ich auch ein Installationstool eingesetzt. |
AW: ein Fass nach dem anderen geht auf
Vielleicht einfach als "Portable App" bezeichnen (it's a feature, stupid!) und Installation nach Program Files nicht erlauben, da Windows dann motzt. Vorgabe sollte c:\PortableApps\DeinProgramm sein. Ansonsten braucht man dann nichts zu ändern und alle sind glücklich.
(OK, ist schon zu spät, ist mir auch gerade aufgefallen. Dann bleibt mir nur noch zu sagen: "Armer schwarzer Kater" ;-) ) |
AW: ein Fass nach dem anderen geht auf
Nur mal so hingedaddelt:
Kann Dein Programm sich nicht selbst deinstallieren? Eine Option dafür einbauen, die alles, was zur Laufzeit entfernt werden kann, entfernt. Für die Sachen, die nicht entfernt werden können ein Script / Batch, ... schreiben und diese in der Registry unter
Code:
eintragen. (
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
oder HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce ![]() Was dort steht, wird einmalig beim nächsten Systemstart ausgeführt. Wenn's z. B. 'ne Batch ist, kann die sich selbst zur Laufzeit löschen und damit wäre alles restlos weg. Sie könnte auch ein von Dir erstelltes Deinstallationsprogramm starten, warten bis das fertig ist, es löschen und sich dann selbst löschen. Wenn's sehr anwenderspezifisch ist, kann man auch ein Programm in den Autostartordner legen, beim nächsten Systemstart / Anmelden wird das dann ausgeführt. Es muss halt "nur" sichergestellt werden, dass sich das dann selbst aus dem Autostartordner löscht. Achso: Das sind nur unausgereifte Ideen, die eventuell 'nen Ansatz liefern könnten (oder aber auch nicht ;-)) |
AW: ein Fass nach dem anderen geht auf
Ich nutze die aktuelle InstallAware Developer und bin zufrieden damit.
Das Ding kann natürlich installieren, deinstallieren, signieren, automatisch (auch im Hintergrund) updaten. Es gibt sicher andere gute... (MSIX Packaging Tool ist je nach Umfang u.U. auch interessant. Das Tool kann auch ein bestehendes Setup in ein MSIX File wandeln.) |
AW: ein Fass nach dem anderen geht auf
Zitat:
|
AW: ein Fass nach dem anderen geht auf
Ich persönlich bin ein Fan vom Windows Installer und dem WIX-Toolset.
![]() Tutorial: ![]() |
AW: ein Fass nach dem anderen geht auf
Mit Inno-Setup geht das wirklich gut:
![]() ![]() ![]() |
AW: ein Fass nach dem anderen geht auf
Windows hat irgendwo eine eigene API um Dateien, die aktuell verwendet werden, für die Löschung beim nächsten Systemstart vorzumerken. Vor unendlich langer Zeit hatte ich dafür in
![]() Die Unsitte, ganze Programme nach %APPDATA% zu installieren, kenne ich auch von vielen Programmen. Meist sind es solche, die X-Plattform sind und sich kaum an die historisch verworrene Ordnerstruktur von Windows anpassen lassen. Letztendlich hat Microsoft das Problem aber selbst geschaffen! Historischer Rückblick aus meiner Erinnerung:
Also ich finde das alles Quark im Quadrat. Mittlerweile ist sogar die halbe Systemordnerstruktur gemappt. Teilweise erscheinen im Explorer Einträge wie C:\Programme sogar doppelt (!!!) wobei einer auf C:\Program Files mappt und der andere mit einem "Zugriff verweigert" versandet. Das einzig Gute an der heutigen Situation ist, dass nach und nach alle älteren Windows-Installationen abgelöst werden und sich auf Windows 10 vereinheitlicht. Doch was soll das Theater mit der UAC in den Programmordnern? Was hat es bitteschön mit Sicherheit zu tun, sich an bestimmten Ordnernamen hochzuziehen? Eigentlich ein Armutszeugnis an Microsoft, dass es da überhaupt Unterscheidungen braucht. Für mich die logische Konsequenz, dass entweder A) die Softwareanbieter auf weniger supportanfällige Ordnerstrukturen ausweichen oder B) die Anwender die UAC abklemmen oder C) beides eintritt. Persönliche Meinung: Beruflich entwickle ich für Windows und sehe all die praktischen Probleme. Privat nutze ich nur noch Linux. @Embarcadero: Packt endlich den Linux-Compiler in alle Delphi-Editions rein und übernehmt CrossVCL ins RAD Studio! Zum Bsp. im öffentlichen Bereich, bei Verwaltungssoftware, wo Delphi noch häufig zum Einsatz kommt, geht der Trend eindeutig weg von Windows. Da wartet keine Softwarebude mehr, dass sich Emba irgendwann mal auskekst, sondern da wird bei älteren Projekten entweder auf Lazarus migriert oder bei neueren Projekten gleich auf Java o.ä. gesetzt. |
AW: ein Fass nach dem anderen geht auf
Zitat:
Die Ursache ist nicht nur bei Microsoft zu suchen, sondern vielmehr bei Unwissenheit oder Ignoranz vieler Entwickler. Denn viele haben es ja auch noch weiter so gemacht als man es ihnen schon längst gesagt hatte. Das sieht man ja an den diversen Fragen zu Workarounds statt richtiger Lösungen. Zitat:
Wenn man nicht nur versteckte Dateien und Ordner anzeigen lässt, sondern auch geschützte Systemdateien, dann bekommt man eben auch Einträge, mit denen man nichts anfangen kann... (Das hat sich aber auch geändert. Anfangs fielen auch Einträge unter Systemdateien, die man vielleicht mal sehen wollte. Aber seit Windows 7 oder 8 gibt es so gut wie nie einen Fall, in dem es sinnvoll ist auch geschützte Systemdateien einzublenden.) |
AW: ein Fass nach dem anderen geht auf
Wie gesagt, aus der Erinnerung. Ist ja auch schon 25 Jahre her :-) Aber:
Zitat:
Aber ganz egal, die Ordnerschluderei wurde ja nicht durch die Ordnernamen begründet. Die waren seit eh und je abhängig von der Lokalisierung. Die Ursache war/ist die UAC und der Defender, die Dateioperationen im Programmordner sabotieren. In meinen Augen darf es keinen Unterschied machen, WO ein Programm installiert ist. Die Systemsicherheit muss sich immer gleich verhalten. Dann hätte es das Ausweichverhalten der Entwickler ja nie gebraucht. |
AW: ein Fass nach dem anderen geht auf
Zitat:
Und Leerzeichen in Ordnernamen gingen bei Windows 95 durchaus schon. Zitat:
|
AW: ein Fass nach dem anderen geht auf
Zitat:
Bei Linux erbt eine Programminstanz ihre Zugriffsrechte ausgehend vom ELF-Objekt. Versucht man aus so einer Instanz einen schreibenden Resourcenzugriff auf ein Objekt, das keine Übereinstimmung bei den schreibenden Zugriffsrechten hat (User und/oder Gruppe), wird das verweigert. So ein "geht ein bisschen" Schreiben wie bei Windows gibts da nicht. Geht oder geht nicht, mit geordnetem Fehler-Handling. EDIT als Ergänzung zum Verständnis, worin der Vorteil von Linux in dem Fall liegt: Wenn mein Programm seine Konfigurationsdateien ablegt, egal wo, dann erben die die selben Zugriffsrechte vom ELF-Objekt. Wenn jetzt ein fremdes Programm daher kommt, das in seinem eigenen Userspace agiert (Standardverhalten), dann kann es auf die Konfigurationsdateien meines Programms nicht zugreifen. Und dieser programmübergreifende Schutz ist bei Windows eben abhängig vom Installationspfad mehr oder weniger stringent, bei Linux überall gleich. |
AW: ein Fass nach dem anderen geht auf
Zitat:
Erstmal kann man im System, sowie auch im Programm derartige Redirections deaktivieren und auch nicht immer wird umgeleitet. Das hängt z.B. vom Manifest ab (oder vom Dateinamen, wie z.B. "Setup") ob und welche "Abwärtskompatibilitäten" aktiv sind. Und das ganze wurde nunmal eingebaut, damit alte "schrottige" Programme weiterhin funktionieren, wovon es leider zuviel gab/gibt. Dass viele Entwickler und auch Endanwender damals oft mit Adminrechten arbeiteten und somit schon lange existierende Sicherheitsmaßnahmen/Beschränkungen umgangen, das war bissl blöd. Und dass es zuviele "schlaue" Programmmierer gab, die Pfade hartgecoded hatten, zu einer Zeit als Pfade lokalisiert wurden und die sich über die Zeit auch mal änderten ... tja, pech. |
AW: ein Fass nach dem anderen geht auf
Zitat:
Ein solches Setup würde die Dateien auf die verschiedenen Ordner verteilen und mit den korrekten Zugriffsrechten versehen (geerbt vom sudo aufrufenden Benutzer). Dann wäre es völlig Banane, ob diese Dateien nun in C:\Program Files oder C:\Users\... liegen, dein Programm hätte überall Zugriff darauf. Damit sind wir nämlich beim entscheidenden Punkt: Bei Windows gibt es inzwischen Instanzen (z.B. SYSTEM) mit höheren Rechten, als jemals ein Anwender erlangen kann. Selbst als Admin stößt du immer wieder auf Dinge, wo dir der "Zugriff verweigert" wird. Ein Unding. Schreibst du Systemdienste, dann laufen die bei Windows im SYSTEM-Kontext. Schreibst du einen Daemon für Linux, dann läuft der mit genau den Rechten, die ihm auf Dateiebene zugewiesen wurden. Schon mal versucht, mit einem Non-Admin-Programm unter Windows auf Dateien schreibend zuzugreifen, die dein eigener (!!!) Dienst erstellt hat? Zitat:
Deshalb finde ich es unfair, diesen inkonsistenten Murks den Entwicklern vorzuwerfen, die wie in diesem Fall seit 30 Jahren ein Projekt pflegen und das evtl. schon wie vom TE beschrieben ein eigenes Ökosystem bildet. Um wieder auf das Eingangsthema zurück zu kommen und mich einigen Vorrednern anzuschließen: Mit Innosetup lässt sich das recht elegant lösen. Es gibt auch grafische IDEs dafür, z.B. Inno Script Studio (kostenlos) oder Install Designer (50 Euro), sodass der Lernaufwand überschaubar bleibt. |
AW: ein Fass nach dem anderen geht auf
Wie gesagt, das kommt drauf an.
Kleines Beispiel zum Selbstausprobieren: * neue VCL-Anwendung erstellen und Setup.exe nennen * in den Projektoptionen das Manifest entfernen (Ohne) * kompilieren * und ins Verzeichnis gucken C:\Users\%Username%\Documents\Embarcadero\Studio\Projekte\Win32\Debug * Es wird im Programm-Icon vom Explorer ein Overlay eingeblendet (das Schutzschild) und beim Start geht der UAC auf * nun das Manifest wieder aktivieren (Automatisch) * neu erzeugen * im Explorer verschwindet das Schutzschild-Overlay und der UAC meldet sich auch nicht mehr * jetzt im Manifest die Ausführungsebene ändern (Admnistrator erforderlich) * neu erzeugen * schon ist UAC und Overlay wieder da, aber nicht wegen dem Namen, sondern weil du es beantragt hast Emba hat inzwischen das Manifest aufgemotzt und unter Anderem auch die <supportedOS>-Abschnitte aufgenommen, wodurch diese Heuristiken nicht aktiviert werden. Auch ohne Admin-Manifest kann man auch im Windows sowas selbst machen. Wie sudo gibt es hier das runas oder auch andere Dinge. |
AW: ein Fass nach dem anderen geht auf
Zitat:
Zitat:
Und es gibt ja auch extra die Trennung zwischen Daten für alle Benutzer und für bestimmte, wenn du ein Setup erstellst. Zitat:
Zitat:
Zitat:
|
AW: ein Fass nach dem anderen geht auf
Zitat:
Gut bei Linux gibt es etwas ähnliches wie das Manifest. Hier wird z.B. eine Datei dadurch zur ausführbaren Datei, dass man ihr ein bestimmtes Dateiattribut gibt. Der Name ist dagegen völlig irrelevant. So kannst du auch reine Textdateien ausführbar machen und das System versucht dann anhand des Dateiinhaltes, die entsprechende Laufzeitumgebung (bash, perl, python u.ä.) zu finden. Aber wir kommen vom Thema ab. Ich kritisiere ja nur das seltsame Windows-Verhalten, die Sicherheit von bestimmten Ordnern abhängig zu machen. Dann versucht man bei Altprojekten genau das, was der TE beschrieben hat: Anpassung an die Microsoft-Vorgaben. Was bei Altprojekten aber oft schwierig ist und in der Folge mehr als nötig in Ordnern mit weniger Sicherheit landet, eben %APPDATA% usw. Das ja, wie schon richtig bemerkt, in Domänenumgebungen dazu führt, dass die Serverprofile vollgemüllt werden und die Windowsanmeldung ewig dauert, weil erstmal alles gesynct werden muss. Zitat:
Zitat:
|
AW: ein Fass nach dem anderen geht auf
Zitat:
Eine Setup.exe mit aktuellem Manifest, sprich eine, die für das aktuelle System gemacht wurde, bekommt diese Kompatibilitätsanpassung nicht. Es hat halt alles Vor- und Nachteile. Bei macOS oder Linux funktioniert ein Tool ggf. einfach ein paar Jahre (oder auch schon bei anderen Distributionen^^) nicht mehr (oft genug selbst erlebt), bei Windows wird es mit der Abwärtskompatibilität dafür schon eher übertrieben. Aber dafür kann man selbst 16-Bit Windows 1.0 Programme noch 35 Jahre später unter Windows 10 32-Bit nutzen... und auch noch ältere MS-DOS Programme funktionieren grundsätzlich noch. Zitat:
|
AW: ein Fass nach dem anderen geht auf
Zitat:
|
AW: ein Fass nach dem anderen geht auf
Zitat:
Zitat:
Zitat:
|
AW: ein Fass nach dem anderen geht auf
Zitat:
Für das System an sich braucht man vieles nicht. Zum Beispiel könnte man unter Windows auch das Netzwerk deaktivieren oder Netzwerkfreigaben deaktivieren oder die linke oder rechte Windows-Taste deaktivieren. Während ersteres wohl vielen auffallen würde, würden Netzwerkfreigaben schon weniger Nutzern fehlen und die Windows-Taste links nutzen noch weniger. Die rechte wiederum nutzt fast niemand. Aber wo zieht man da die Grenze? Was braucht "der Nutzer" und was nicht? Und das ist der Unterschied zu Linux. Bei Windows soll das System einfach vieles können ohne dass man davon etwas wissen muss, bei Linux muss man vieles explizit installieren oder konfigurieren, dafür ist ein Basis-System sehr schlank. Leider gibt es zu einigen der "unnötigen" Dienste aber trotzdem Abhängigkeiten. Könnte man diese also auch heute noch einfach abschießen, würde bei manchen das gleiche passieren wie damals als das noch ging: Es gibt einen Fehler. Bei Windows 98 gab es dann einen Bluescreen, heute würde vielleicht nur etwas nicht mehr gehen, weil die Prozesse besser voneinander getrennt sind. Ich vermisse die Zeit nicht, in der man bei Win 9x ziemlich einfach mit ein paar Klicks Windows zum Absturz bringen konnte... Deshalb sehe ich solche Schutzmaßnahmen etwas differenzierter. |
AW: ein Fass nach dem anderen geht auf
Zitat:
Code:
sein sollte (in der Registry übrigens auch).
c:\programme\<Firmenname>\<Programmname>
Bezüglich des UAC bzw. der Virtualisierung hat sich Microsoft keinen gefallen getan. Unter Win95 und ähnlichen Heimprodukten gab es keine Probleme mal was in den o.g. Ordner zu schreiben. Unter den NT Betriebssystem also auch NT4 durften bereits Benutzer da nicht mehr hinschreiben. Das Problem war aber das viele Programmierer das nicht verstanden haben und somit unter Win7 vieles nicht mehr lief und MS sich daher entschieden hat den Mist einzubauen, damit die Programmierer nicht umdenken müssen. Unter %APPDATA% zu Installieren finde ich nicht schlimm, da der Benutzer somit in der Domäne die Software auf jeden PC zur Verfügung hat. Da kommt aber das andere Problem, welches du beschreibst. Programme sind dann mehrfach auf der Platte. Meine Antwort: Dann verschwendet nicht soviel Platz mit euren Programmen. Warum ist Office 3GB Groß? Vor 10 Jahren war das noch im MBytebereich. Alternativ: Spielt Größe heute noch eine Rolle mit de-duplizierenden Dateisystemen wie REFS? |
AW: ein Fass nach dem anderen geht auf
Zitat:
Starter, Embedded, IoT, Core, ... Selbst von Android gibt es inzwischen eine sparsame "Go"-Variante für "kleine" Systeme. Mam muß nicht immer die Home/Professional-Editionen verwenden, wo alles Mögliche idiotensicher vorinstalliert/-aktiviert ist. |
AW: ein Fass nach dem anderen geht auf
Zitat:
Seltsam, heute ist doch noch gar nicht Freitag und wir philosophieren schon :lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 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