Autor Beitrag
Csharp-programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Fr 29.07.16 22:45 
Hallo,
bei der Programminstallation werden wichtige Programmdaten in den Systemordner (Environment.SpecialFolder.ProgramFiles) gespeichert. Wenn das Programm darauf zugreifen soll, muss man es ja mit Administratorrechten starten. In diesem ProgramFiles Ordner liegt nun eine Datei, die einen wichtigen Pfad beinhaltet, den die Hauptanwendung (die man ohne Administratorrechten starten soll) dringend braucht. Gibt es irgend eine andere Speichermethode, die auch so "Professionell" ist?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1207
Erhaltene Danke: 159

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Fr 29.07.16 22:57 
Zitat:
Wenn das Programm darauf zugreifen soll, muss man es ja mit Administratorrechten starten.


Nur wenn Du Schreibrechte brauchst, Leserechte hast Du dort.

Zum Speichern von programmspezifischen Daten ist aber der AppData-Ordner gedacht, nicht ProgrammFiles.
Wenn Du das Settings-Features nutzt, werden dir darüber abgewickelten Settings auch unter AppData gespeichert und automatisch gelesen/gespeichert.



Wenn ich mir deinen Thread-Titel so anschaue, würde ich aber eher vermuten, dass Du dir merken willst, wohin ein programm installiert wurde.
Wenn Du die Installation über den Microsoft Installer abwickelst, dann brauchst Du das aber gar nicht tun, das tut Windows nämlich schon von sich aus, Du musst es "nur" noch abfragen.
Einfach mal Google dazu befragen.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Fr 29.07.16 23:25 
Naja aber dann müsste ich wieder ein anderes Programm nutzen. Ich möchte wirklich sagen können, dass alles (Setup, Updater, DLLs und andere Dateien) alle ich gemacht habe. Der Installer funktioniert schon. Der Knackpunkt ist nur, dass beim Installer das Verzeichnis gelöscht werden muss, in dem der Installer sich befindet. Nun würde ich eine Datei schreiben, wie einen Code hat. Anhand von diesem Code soll nun geguckt werden, ob das Programm zum ersten mal gestartet wird und dann eben das eine Verzeichnis löschen.

Also den AppData Order soll ich benutzen?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1207
Erhaltene Danke: 159

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Fr 29.07.16 23:31 
Zum Speichern von anwendungsbezogenen Daten (Application Data -> AppData) ist der Ordner gedacht.
Und zum Speichern von z.B. Einstellungen ist das Settings-Feature in .NET gedacht, einfach mal unter Projekteigenschaften links auf Einstellungen gehen.
Da bekommst Du dann eine Tabelle, wo Du einen Key (der später auch der Property-Name wird) eintragen kannst, ob es Benutzer- oder Anwendungbezogen ist, der Wert dazu und eine Beschreibung.



Und nutze bitte den Microsoft-Installer.
Was ich so gar nicht leiden kann, ist ein Programm, dass sich irgendwie selber "installiert", möglicherweise Probleme macht und am Ende nicht von Windows normal gefunden oder deinstalliert werden kann.
Gerade Letzteres wird über MSI nämlich auch geregelt.

Ich will jetzt nichts falsches behaupten, aber ich meine, dass ein solcher Microsoft Installer gleichzeitig auch deinstallieren kann, anhand der eigens mit geschriebenen Schritte, die während der Installation ausgeführt wurden.

Zweiter Vorteil:
Jeder kennt ihn, da er immer und überall genutzt wird.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Fr 29.07.16 23:51 
Hm ja okay. Ich habe mir dieses Video angesehen und finde Setup and Deployment bei mir nicht :oops:

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1207
Erhaltene Danke: 159

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Fr 29.07.16 23:54 
Da muss ich mich dann aber leider auch aus klinken. :D
Ich weiß nur, dass es nicht unbedingt eine gute Idee ist, den Installer selber zu machen.
Du hast dann auch gleich den Vorteil, dass der Installer mehr als nur ein paar mal getestet wurde ;)
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Sa 30.07.16 00:00 
Ja naja das stimmt schon. Jetzt habe ich mich bereits erklärt, den Installiert zu nutzen und es gibt ihn in meinem VS 2015 nicht. Tolle erste Begegnung zwischen dem installier und mir ... :D

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 30.07.16 00:03 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Sa 30.07.16 00:17 
Registry? Wie kann ich mir das Vorstellen? Wie ein Dateienverzeichnis, was für jeden Benutzer separat existiert und an das man ohne besondere Software nicht herankommt?

Oder ich würde eine XML Datei als Einstellung schreiben, die sich dann per Wunsch auf einer HDD installieren kann. Weil die Registry befindet sich ja dann auf einer (falls vorhanden) SSD.

Das Problem mit meinem Installiert ist dann, wie Palladin schon schrieb, dass Windows diese Anwendung dann nicht kennt...

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1207
Erhaltene Danke: 159

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Sa 30.07.16 00:28 
Was Frühlingsrolle schreibt, stimmt schon: Du kannst Windows sagen, was Du da installierst, das musst Du dann aber selber machen.
Sprich: Ausführlich informieren, was der Standard-Installer so alles tut und das dann nach bauen, damit Windows danach damit arbeiten kann.

Und ich weiß nicht, wie ihr das seht, aber ich mag das nicht, wenn irgendein Programm auf eigene Faust in meiner Registry rum schreibt :D

Schließlich ist das sozusagen die Datenbank von Windows, wird darin was falsch gemacht, kann das im schlimmsten Fall dazu führen, dass Windows nicht mehr richtig startet.
Ich bezweifle, dass das so schnell passiert, wenn Du dich vorher gut informierst und es auch brav testest, aber die Gefahr besteht trotzdem.


Oder - und das finde ich persönlich am besten - du lässt den Installer weg und sorgst dafür, dass es nicht installiert werden muss.
Das funktioniert bei vielen Anwendungen sehr gut. Anwendungen wie Visual Studio dagegen greifen sehr tief in's System ein, die brauchen einen Installer. Notepad++ dagegen muss nicht installiert werden, dazu gibt's auch eine portable-Version, die kannst Du hin kopieren wo Du lustig bist und dann von dort aus nutzen.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 30.07.16 02:41 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Di 02.08.16 20:05 
Okay. Vielen Dank, aber wir werden erstmal nur eine Einstellungsdatei erstellen. Da das Programm ja nicht über den Windows Installer installiert wird, erkennt Windows dieses Programm auch nicht als Standartprogramm. Gibt es irgendeine Möglichkeit, dass Windows unser Programm als Standartprogramm erkennt?

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4464
Erhaltene Danke: 919


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 02.08.16 20:12 
Standardprogramm für was? Und was hat diese Frage mit dem Titel des Threads zu tun?
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1207
Erhaltene Danke: 159

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Di 02.08.16 20:26 
Zitat:
Gibt es irgendeine Möglichkeit, dass Windows unser Programm als Standartprogramm erkennt?


Ja, indem Du alle nötigen Daten in der Registry manuell registrierst.
Was das für Daten sind und wo die hin kommen, weiß ich nicht, eine kurze Google-Suche hat aber das ergeben:
msdn.microsoft.com/e...872121(v=vs.85).aspx
stackoverflow.com/qu...-uninstall-a-program
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18838
Erhaltene Danke: 1654

W10 x64 (Chrome, IE11)
Delphi 10.2 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 03.08.16 06:52 
user profile iconCsharp-programmierer hat folgendes geschrieben Zum zitierten Posting springen:
Naja aber dann müsste ich wieder ein anderes Programm nutzen. Ich möchte wirklich sagen können, dass alles (Setup, Updater, DLLs und andere Dateien) alle ich gemacht habe.
Bei privaten Programmen ist das in Ordnung (auch wenn ich sie dann eher nicht nutze), bei professionellen Programmen ist das im Normalfall ein No-Go. Bei einigen Kunden wird etwas anderes als ein MSI-Setup auch gar nicht akzeptiert, weil nur das optimal in das Deployment in einer Domäne eingebunden werden kann.

user profile iconPalladin007 hat folgendes geschrieben Zum zitierten Posting springen:
Und ich weiß nicht, wie ihr das seht, aber ich mag das nicht, wenn irgendein Programm auf eigene Faust in meiner Registry rum schreibt :D

Schließlich ist das sozusagen die Datenbank von Windows, wird darin was falsch gemacht, kann das im schlimmsten Fall dazu führen, dass Windows nicht mehr richtig startet.
Ich bezweifle, dass das so schnell passiert, wenn Du dich vorher gut informierst und es auch brav testest, aber die Gefahr besteht trotzdem.
Solange du dich nur in dem vorgesehenen Pfad unter Software\Firma\Anwendung herumtreibst passiert da auch nichts. Für einfache kleine Einstellungen ist die Registry nach wie vor der empfohlene Weg, zumindest für native Windows-Anwendungen.
Für Daten (und ggf. auch umfangreichere Konfigurationsdaten) gibt es das AppData-Verzeichnis wie schon genannt. Für ein paar einfache Einstellungen ist das aber weniger sinnvoll, insbesondere wenn die Einstellungen benutzerspezifisch innerhalb einer Domäne transportiert werden sollen.

Da bei .NET Anwendungen Settings.Default leider in eine Datei schreibt, weicht Microsoft da von seinem eigenen Standard ab. Da .NET-Anwendungen heute aber auch auf anderen Plattformen funktionieren, auf denen es die Registry nicht gibt, macht das durchaus Sinn.

user profile iconPalladin007 hat folgendes geschrieben Zum zitierten Posting springen:
Oder - und das finde ich persönlich am besten - du lässt den Installer weg und sorgst dafür, dass es nicht installiert werden muss.
Das dürfte bei .NET Anwendungen schwerfallen, es sei denn du beschränkst dich auf Windowsversionen, die die notwendige .NET Version bereits mitliefern...
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1207
Erhaltene Danke: 159

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Mi 03.08.16 10:54 
Naja, ich bin immer noch kein Freund von der Registry :D
Ich werde nie in der Registry schreiben, wenn ich nicht muss, schon allein, weilman dann bei Problemen entsprechende Anwendungs-Einstellungen kontrollieren und bearbeiten kann ohne Admin-Rechte zu brauchen.
Aber das muss dann wohl jeder für sich entscheiden. Unter .NET ist es ja denkbar einfach, die Settings zu nutzen

Zitat:
Das dürfte bei .NET Anwendungen schwerfallen, es sei denn du beschränkst dich auf Windowsversionen, die die notwendige .NET Version bereits mitliefern...


Stimmt, das hab ich übersehen
Allerdings kann man für den Fall dann ein Script bei legen, was prüft, ob die nötige .NET-Version installiert ist und gegenenfalls installiert, bevor es dann die Hauptanwendung startet. Ist nicht weiter schwierig, Windows bietet alle nötigen Optionen dafür.
Wem eine Script-Datei zu unschön ist, der kann das ja als Exe kompilieren. Sowohl für Batch als auch für PowerShell gibt's Tools, die das machen.
Stimmt zwar, dass dann auch etwas installiert wird, allerdings finde ich das bei .NET nicht weiter wild. Das ist sehr klein und ist auf den meisten halbwegs aktuellen Windows-Rechnern sowieso vorhanden.

Das Schöne bei dem Vorgehen ist einfach, dass ich als Anwender weiß, was da mit meinem System gemacht wird.
Aber ich gebe zu, für weniger affine Anwender ist das nicht so schön...