Fragen zum erstellen eines Installers für mein vb.Net Programm

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    Fragen zum erstellen eines Installers für mein vb.Net Programm

    Hallo ihr lieben
    Ich möchte für mein fertiges Vb.Net Programm einen Installer erstellen.
    Dazu habe ich mir das "Microsoft Visual Studio Installer Project" heruntergeladen: marketplace.visualstudio.com/i…udio2017InstallerProjects
    Hiermit habe ich erfolgreich einen Installer erstellt, habe aber noch ein paar Fragen.

    1. In allen Tutorials die ich gesehen habe wird gesagt, ich soll den "Primären Output" meines Hauptprojektes als Quelle für den Installer angeben.
    Wenn ich dies aber tue, habe ich im Ordner meines installierten Programmes sehr viele Dateien - die exe und einen Haufen dlls.
    Alternativ kann ich ja auch nur die benötigten Dateien für meinen Installer angeben. Also über "Hinzufügen - Dateien - und einzeln auswählen"
    Beides scheint tadellos zu funktionieren. Warum sollte ich also den Output angeben?

    Edit: 2. Hat sich erledigt. Habe das Icon erneut heruntergeladen und nun geht es. Lag also an der Datei.
    Spoiler anzeigen
    2. Ich habe im "Application Folder" des Installers das Programmsymbol (.ico) eingefügt und dieses sowohl als Icon für die Verknüpfung auf dem Desktop, als auch als "AddRemoveProgrammsIcon" eingefügt.
    Im sich öffnenden Dialog - also da wo ich den Pfad des Icons auswählen muss - wird mir auch das korrekte Bildchen angezeigt. Im installieren Programm aber sehe ich dann kein Icon.
    In der Systemsteuerung ist einfach ein schwarzes Bildchen. Meine Desktopverknüpfung hat nur irgendein Standartsymbol.
    Das gleiche Icon funktioniert in meiner Hauptanwendung, bei der exe einwandfrei. Muss ich im Installer auf irgendetwas achen, damit das Symbol korrekt angezeigt wird?


    3. Mein installiertes Programm nutzt ein typisiertes Dataset, welches die Daten als xml im Programmordner speichert.

    VB.NET-Quellcode

    1. Private _DataFile As New FileInfo("Tee.Xml")
    2. #Region "Form Close und Load Event"
    3. Private Sub frmHauptform_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. If File.Exists(_DataFile.FullName) Then
    5. DataSet1.ReadXml(_DataFile.FullName)
    6. End If
    7. 'Checkbox in "Einstellungen"
    8. CBPosition.Text = My.Settings.Position
    9. End Sub
    10. Private Sub frmHauptform_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
    11. DataSet1.WriteXml(_DataFile.FullName)
    12. End Sub
    13. #End Region

    Wenn ich mein Prorgramm nun nach C:\Program Files(x86)\Programmname installiere dürfte das ganze ja eigentlich nicht funktionieren, da ich zum Schreiben in diesen Ordner ja Adminrechte brauche.
    Aber es klappt einwandfrei. Ich kann Daten speichern, nach neustarten meines Programmes sind diese auch noch da. Jedoch finde ich in meinem Programmverzeichnis keine Datei namens Tee.xml. Auch mit Windows Suche finde ich diese nicht. Wo werden diese gespeichert, wo ist meine Tee.xml?
    Wenn ich in meinen installierten Programm nun Änderungen am DataSet vornehme und den Ordner dann auf den Desktop kopiere, werden mir diese nicht angezeigt.
    Hier wird jetzt eine neue Tee.xml im Progammverzeichnis (also auf dem Desktop) angelegt.
    Wenn ich diese Tee.xml in den Ordner meines installierten Programmes kopiere (also in den Ordner "Programme"), wird diese komplett ignoriert. Es wird weiterhin auf die Datei zugegriffen, die ich nicht finden kann.
    Warum ist das so, und warum greift mein Programm nicht auf die Tee.xml im installierten Ordner zu, bzw. schmeißt mir keinen Fehler, weil es nicht in diese Datei schreiben kann?

    Edit:
    Ich habe die gesuchte Datei soeben gefunden. Nicht lachen, aber man kann sich auch bei dem Wort "Tee" verschreiben...
    Die Datei steckt in C:\Users\flori\AppData\Local\VirtualStore\Program Files (x86)\Tea Timer\Tee.Xml
    Was sucht die da?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DerSmurf“ ()

    DerSmurf schrieb:

    Was sucht die da?
    Das ist die Windows Dateisystemvirtualisierung.
    Dieses System gestattet es Programmen, die noch etwas älteren Kalibers sind und daher einfach in Administrator- bzw. Systemgeschützten Ordner rumfuhrwerken, dennoch zu funktionieren, indem sämtliche Anfragen in die "virtuelle" Dateiumgebung umgeleitet werden. Dadurch laufen auf der einen Seite Programme nicht ständig mit Admin rechten, auf der anderen Seite können Programme die dennoch in solchen Ordnern arbeiten, weiterhin funktionieren.
    Sofern dieses Verhalten nicht gewünscht ist, schreib am besten die benötigten Dateien selbst in den AppData Ordner, indem du mit Environment.GetFolderPath(Environment.SpecialForlders.ApplicationData) einen Pfad nur für deine Applikation erstellst. Dieser Pfad ist jedoch spezifisch für einen User und wird z.B. in AD Umgebungen auf alle Maschinen übertragen, an dem sich der User anmeldet. Möchtest du Dateien für alle User auf einem Rechner speichern, benutz CommonApplicationData. Ansonsten findest du in der SpecialFolders Enumeration noch viele andere nützliche Dinge:
    docs.microsoft.com/de-de/dotne…der?view=netframework-4.8
    Huhu
    Danke für deine Erklärung und den Link :)

    Wenn ich das also richtig verstanden habe, ist speichern im Programmordner der korrekte (oder saubere) Weg, wenn ich das Programm ohne Installer verwende.
    Da ja dann auch tatsächlich in den Programmordner geschrieben werden kann.
    Wenn ich das ganze mit einem Installer ausliefere - es also wahrscheinlich in einem Ordner landet, in dem nicht geschrieben werden kann - dann ist es sauberer den AppData Ordner zu verwenden.

    Stimmt das so? Oder ist mein Weg (einfach immer in den Programmordner zu schreiben und Windows den Rest machen lassen) ebenfalls in Ordnung - also nicht unsauber?
    In jedem Fall ist das Schreiben in den Programmordner die unsaubere Lösung. Microsoft hat das System nur eingebaut, damit Programme die Ursprünglich immer als Admin gelaufen sind gerade Weil sie im Programme Ordner geschrieben haben, nun eben nicht mehr Admin-Rechte benötigen, da seit Windows 7 (Vista?) mit der Einführung der UAC Admin-Rechte ernst- und als potentielle Angrifssmöglichkeit wahrgenommen werden.

    Wenn es eigentlich ziemlich egal ist wo die Datei liegt, dann hau sie einfach, wie beschrieben, in den AppData Ordner. Soll der User mit der Datei auf irgendeine Art und Weise interagieren, kannst du sie ihm auch bspw. in den Dokumente Ordner (MyDocuments / Personal) legen. Viele Spiele haben dort ihre Safe-Files und auch Visual Studio speichert dort neben ein paar anderen Dingen auch Standardmäßig die Projekte. Damit kann der User die Datei auch einfach von Rechner A zu Rechner B übertragen, sollte er das System mal wechseln.