Debug Ordner werden erstellt, Setup installieren Ordner werden nicht erstellt

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

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Kevin B..

    Debug Ordner werden erstellt, Setup installieren Ordner werden nicht erstellt

    Hallo Zusammen,

    ich habe da Problem das wenn ich das Programm Starte im Debug modus da werden die Ordner erstellt aber sobald ich das in eine Setup Umwandel und installiere werden diese nicht erstellt und bekomme die Meldung


    Ich habe das so Probiert:

    VB.NET-Quellcode

    1. ​If IO.Directory.Exists(Environment.SpecialFolder.MyDocuments & "\Ordner") = False Then
    2. IO.Directory.CreateDirectory(Environment.SpecialFolder.MyDocuments & "\Ordner")
    3. IO.Directory.CreateDirectory(Environment.SpecialFolder.MyDocuments & "\Ordner\Update")
    4. End If


    aber auch so:

    VB.NET-Quellcode

    1. ​If IO.Directory.Exists("c:\Ordner") = False Then
    2. IO.Directory.CreateDirectory("c:\Ordner")
    3. IO.Directory.CreateDirectory("c:\Ordner\Update")
    4. End If


    Bei beiden bekomme ich die Meldung.
    Ich währe sehr dankbar wenn Mir da wer helfen könnte.

    LG Kevin B.
    @Kevin B. ZUnächst solltest Du mal aufklären, welcher Ordnder da nicht erstellt wurde.
    Die Meldung nennt den Konstruktor eines FileStreams wohl für einen WebClient als Übeltäter.
    Was passiert, wenn Du das Programm in der Release startest? Üblicherweise wird die für ein Setup verwendet.
    Und
    Diese Zeilen kannst Du einfach so aufrufen (ohne Test und Iteration):

    VB.NET-Quellcode

    1. IO.Directory.CreateDirectory(Environment.SpecialFolder.MyDocuments & "\Ordner\Update")
    2. ' ...
    3. IO.Directory.CreateDirectory("c:\Ordner\Update")
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Es werden keine Ordner erstellt in Dokumente oder mit dem andren weg auch keine unter C:

    Wenn ich dies im Realse teste passiert das gleiche nur das mir das angezeigt wird:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. System.IO.FileNotFoundException wurde nicht behandelt.
    2. FileName=C:\Users\Kevin\documents\visual studio 2015\Projects\WindowsApplication10\WindowsApplication10\bin\Release\VFS\version.txt
    3. HResult=-2147024894
    4. Message=Die Datei C:\Users\Kevin\documents\visual studio 2015\Projects\WindowsApplication10\WindowsApplication10\bin\Release\VFS\version.txt konnte nicht gefunden werden.
    5. Source=Microsoft.VisualBasic
    6. StackTrace:
    7. bei Microsoft.VisualBasic.FileIO.FileSystem.DeleteFileInternal(String file, UIOptionInternal showUI, RecycleOption recycle, UICancelOption onUserCancel)
    8. bei VFS.Anmelden.UpdateToolStripMenuItem_Click(Object sender, EventArgs e) in C:\Users\Kevin\documents\visual studio 2015\Projects\WindowsApplication10\WindowsApplication10\Anmelden.vb:Zeile 92.
    9. bei System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
    10. bei System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
    11. bei System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
    12. bei System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
    13. bei System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
    14. bei System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
    15. bei System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
    16. bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    17. bei System.Windows.Forms.Control.WndProc(Message& m)
    18. bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    19. bei System.Windows.Forms.ToolStrip.WndProc(Message& m)
    20. bei System.Windows.Forms.MenuStrip.WndProc(Message& m)
    21. bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    22. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    23. bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    24. bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    25. bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    26. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    27. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    28. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    29. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    30. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    31. bei VFS.My.MyApplication.Main(String[] Args) in :Zeile 81.
    32. bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    33. bei System.AppDomain.nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    34. bei System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
    35. bei System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
    36. bei System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
    37. bei System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
    38. bei System.Activator.CreateInstance(ActivationContext activationContext)
    39. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
    40. bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    41. bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    42. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    43. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    44. bei System.Threading.ThreadHelper.ThreadStart()
    45. InnerException:
    @Kevin B. Lesen und verstehen:
    Die Datei C:\Users\Kevin\documents\visual studio 2015\Projects\WindowsApplication10\WindowsApplication10\bin\Release\VFS\version.txt konnte nicht gefunden werden.
    Ich denke mal, Du hast bisher in der Debug gearbeitet und mit der Zeit im Debug-Ordner einen Haufen Kram angesammelt, der da nicht hingehört.
    Nun machst Du das im Release-Verzeichnis und wunderst Dich, dass der Kram, der im Debug vorhanden ist, im Release nicht vorhanden ist.
    Gleich das mal ab: \VFS\version.txt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Er soll ja ein Ordner erstellen unter Dokumente mit den Name VFS und da soll das den rein das macht er aber nicht.

    VB.NET-Quellcode

    1. IO.Directory.CreateDirectory(Environment.SpecialFolder.MyDocuments & "\VFS")
    2. IO.Directory.CreateDirectory(Environment.SpecialFolder.MyDocuments & "\VFS\Update")
    3. File.Delete(Environment.SpecialFolder.MyDocuments & "\VFS\version.txt")'Da meckert er rum das entweder die datei vorhanden ist oder die Datei nicht vorhanden ist.


    Mach ich das mit eine If abfrage ist genau das gleiche obwohl er dies den löschen sollte.

    VB.NET-Quellcode

    1. If System.IO.File.Exists(Environment.SpecialFolder.MyDocuments & "\VFS\version.txt") Then
    2. File.Delete(Environment.SpecialFolder.MyDocuments & "\VFS\version.txt")
    3. End If


    Mein Plan ist ja auch das er erstmal die Ordner erstellt unter Dokumente, das macht er ja nicht.

    Kevin B. schrieb:

    das macht er aber nicht.
    Du gehst da offensichtlich anders herum heran.
    Wie kommt Dein Programm dazu, einen Pfad anzumeckern, den es nicht gibt?
    Pack alle Verzeichnis-Zugriffe Deines Programms in eine Klasse / eine Prozedur und sorge dafür, dass es da keine Quergriffe gibt.
    Diese Prozedur hat (mindestens) einen Parameter, der den Zielpfad beschreibt, z.B. ein Enum, und gibt den Pfad zur Verwendung zurück.
    Vorher kannst Du noch sicherstellen, dass dieser Pfad existiert.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Kevin B. Habe ich das jetzt richtig verstanden: Dieser eine Code greift im Debug und nach Install auf verschiedene Verzeichnisse zu?
    Ich denke mal, das Problem sitzt 30 cm vor dem Bildschirm.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Lass Dir mal das Verzeichnis Environment.SpecialFolder.MyDocuments in einer MessageBox ausgeben, im Debug, im Release, nach Installation.
    Ich wette, das ist überall gleich, es sei denn, die Installation erfolgt auf einem anderen Rechner oder unter einem anderen Login.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Kevin B. Langsam kommt es ans Tageslicht. 8o
    • Machst Du Option Strict On.
    • VB.NET-Quellcode

      1. MessageBox.Show(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments))

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    hab es auf on gestellt nun geht nichts mehr

    VB.NET-Quellcode

    1. Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    2. Fehler BC30512 "Option Strict On" lässt keine impliziten Konvertierungen von "Integer" in "String" zu. WindowsApplication10 C:\Users\Kevin\documents\visual studio 2015\Projects\WindowsApplication10\WindowsApplication10\Anmelden.vb 14 Aktiv

    ist nicht der einzige sind noch etliche mehr.
    Wie könnte ich dies losen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kevin B.“ ()

    Kevin B. schrieb:

    nun geht nichts mehr
    ...
    Wie könnte ich dies losen?
    Dieser eine Fall (und wahrscheinlich noch einige andere) gehen mit .ToString().
    Strict On sorgt dafür, dass Du Dir nen Kopf machst, welche Datentypen Du verwenden musst!
    Das System macht sicherlich das meiste richtig, aber eben nur das meiste, wie Du oben gesehen hast.
    Denn wenn das System daneben konvertiert, suchst Du Dich manchmal dumm und dusselig.
    Auch deswegen Strict On.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!