Eine eigene Datei Endung Erstellen (Mit Icon)

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

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von Sieber Max Produktion.

    Eine eigene Datei Endung Erstellen (Mit Icon)

    Hey, Ich brauche Hilfe bei einem Neuem Projekt von mir (Kleine CodeSnippet DatenBank)

    Um das Ganze etwas Besser zu gestalten hatte ich vor Eine Eigene Datei-Endung mit Icon zu Erstellen und Habe mich hier auch ein Bisschen Umgeschaut,
    und dabei Das Hier gefunden allerdings Funktioniert der Code nicht, ich habe Alles Richtig eingebunden aber bei dem Code

    VB.NET-Quellcode

    1. If Registerfile(".csn", "CodeSnap-Datei", Application.StartupPath & "\CodeSnap.exe", Application.StartupPath & "\icon.ico") Then
    2. MessageBox.Show("Die Dateiendung *.csn wurde erfolgreich registiert.", "Info")
    3. Else
    4. MessageBox.Show("Die Dateiendung konnte nicht registriert werden.")
    5. End If


    Kommt immer nur die 2. MessageBox ("Die Dateiendung konnte nicht registriert werden.") Obwohl der Pfad Richtig ist
    Habe das Ganze auch nochmal mit nem Breakpoint Ueberprueft aber Es funktioniert Nicht, es kommt immer nur der Fehler

    Hoffe Ihr Koennt mir da Etwas Aushelfen :)
    Begeisterter BF4 Spieler :D
    Application.StartupPath & "\CodeSnap.exe"

    Kann es sein, dass da sowas wie C:\Blubb\\CodeSnap.exe drin steht? Verwende zum Verbinden von Pfaden immer System.IO.Path.Combine!
    Und mach auch folgendes:

    VB.NET-Quellcode

    1. Dim ApplicationFilePath = ...
    2. If Not System.IO.File.Exists(ApplicationFilePath) Then Throw New WTFException("Nope, die Datei muss existieren!")
    3. Registerfile(...

    Dadurch ist sichergestellt, dass die Datei wirklich existiert.
    Ein einfaches "Ich hab mir den Pfad angesehen und er scheint OK zu sein." lass ich nicht gelten, denn das hat genau so viel Aussagekraft wie "Ja, ich hab meinen Router ausgeschaltet, 30 Sekunden gewartet und wieder eingeschaltet.".
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Niko Ortner“ ()

    habe das ganze per Breakpoint geprueft

    Ein einfaches "Ich hab mir den Pfad angesehen und er scheint OK zu sein." lass ich nicht gelten
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Ok such mal ev. wie das unter win 10 gemacht wird bzw. wie andere Programme das machen. Und sry wegen meiner Frage aber es ist eben manchml so das einfach nur C&P gemacht wird....

    Ich würde gern auch suchen bin aber grad nur mobil unterwegs...

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    @Gangsterkrafter Kann es sein das nach einem neustart das Icon uebernommen wurde? Ich habe den Verdacht das Windows-Intern eine Meldung fuers Update sorgt, beim einfachen Eintragen wird ja nirgends ne Meldung gemacht. Wenn ich die reg.exe nutze, wird sofort das richtige Icon angezeigt.

    Anstatt das selbst in die Registry einzutragen, mach ich das via CMD. Die cmd.exe Kannste ja mit Parametern starten.

    Mit diesen drei Zeilen kannst das registrieren. Fuer ersten zwei Zeilen schau hier fuer mehr:
    commandwindows.com/assoc.htm?PageSpeed=noscript

    Die 3. Zeile macht den Eintrag fuer das Icon.

    Quellcode

    1. assoc .foo=MyType
    2. ftype MyType="C:\Program Files\Notepad++\notepad++.exe" "%1"
    3. reg.exe add "HKCR\MyType\defaulticon" /ve /d "E:\Icons\ico.ico" /f


    Edit:
    Ich habe das gerade mal getestet und einfach so das Icon direkt via Regedit angepasst, es wird erst nach einem neustart uebernommen.

    So geht es jedenfalls mit der cmd.exe und reg.exe aus dem Programm heraus. Todos: .fuba mit deiner Dateinamenerweiterung austauschen, wie auch FubaType mit deiner Dateitypen-Bezeichnung.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Register()
    2. Dim p As New Process
    3. Dim psi As New ProcessStartInfo
    4. 'workingdirectory anpassen!
    5. psi.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.SystemX86)
    6. psi.CreateNoWindow = True
    7. psi.UseShellExecute = False
    8. psi.FileName = "cmd.exe"
    9. psi.Arguments = "/c assoc .fuba=FubaType"
    10. p.StartInfo = psi
    11. p.Start()
    12. p.WaitForExit()
    13. psi.Arguments = "/c ftype FubaType=""C:\Program Files\Notepad++\notepad++.exe"" ""%1"""
    14. p.StartInfo = psi
    15. p.Start()
    16. p.WaitForExit()
    17. psi.FileName = "reg.exe"
    18. psi.Arguments = "add ""HKCR\FubaType\defaulticon"" /ve /d ""E:\Icons\ico.ico"" /f"
    19. p.StartInfo = psi
    20. p.Start()
    21. End Sub

    And i think to myself... what a wonderfuL World!

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

    Also gibt es Keinen weg drum herum das System neu zu Starten um das icon zu aendern?

    EDIT:

    Hab das ganze jetzt erstmal im CMD probiert,

    Das erste Kriterium ist dass Man Admin Rechte braucht (Frage dazu wie erzwinge ich dass mein Programm als Admin gestartet sein muss)

    Jedoch nun Aendert sich nichts an der Datei (.csn Datei)
    Und in der Registry ist auch nicht wirklich Viel vom CMD Hinzugefuegt worden:



    Und Hier nochmal die Ordner Ansicht:




    Diesen Code habe ich Benutzt (Im CMD)

    Quellcode

    1. assoc .csn=CodeSnap
    2. ftype MyType="C:\Program Files\Notepad++\notepad++.exe" "%1"
    3. reg.exe add "HKCR\MyType\defaulticon" /ve /d "icon.ico" /f
    4. pause

    Achja Anzumerken ist dass dieser Code in der datei "create file ending.bat" ist also im Gleichen ordner der "icon.ico"
    Begeisterter BF4 Spieler :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gangsterkrafter“ ()

    Probier doch mal mein Codebeispiel aus.(Der im Spoiler, Adminrechte werden noetig sein.) Sollte gehen.

    Edit:
    @Gangsterkrafter
    Du hast ja immer noch MyType drin stehen, bei dir muss es doch CodeSnap sein. Pass die 2. und 3. Zeile an.

    Wenn du meinen VB Code nimmst und dein Programm keine Adminrechte braucht, liefer eine Anwendung mit, die nur fuer die Registrierung da ist, diese startest du mit Adminrechten. Wenn du einen start mit Adminrechten haben willst, kannst du im Projektmappenexplorer auf MyProject doppelklicken, dort den Reiter anwendung, dort ist ein Button "Windows-Einstellungen anzeigen", diesen betaetigen, in der geoeffneten datei diese Zeile <requestedExecutionLevel level="asInvoker" uiAccess="false" /> mit dieser austauschen. <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />. Jetzt kann die App nur mit Adminrechten gestartet werden. Wenn dein Programm als Admin ausgefuehrt wird, "erben" die Programme die du aus deiner App startest diese Rechte.

    VB.NET-Quellcode

    1. Private Sub Register()
    2. Dim p As New Process
    3. Dim psi As New ProcessStartInfo
    4. 'workingdirectory anpassen!
    5. psi.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.SystemX86)
    6. psi.CreateNoWindow = True
    7. psi.UseShellExecute = False
    8. psi.FileName = "cmd.exe"
    9. psi.Arguments = "/c assoc .fuba=FubaType"
    10. p.StartInfo = psi
    11. p.Start()
    12. p.WaitForExit()
    13. psi.Arguments = "/c ftype FubaType=""C:\Program Files\Notepad++\notepad++.exe"" ""%1"""
    14. p.StartInfo = psi
    15. p.Start()
    16. p.WaitForExit()
    17. psi.FileName = "reg.exe"
    18. psi.Arguments = "add ""HKCR\FubaType\defaulticon"" /ve /d ""E:\Icons\ico.ico"" /f"
    19. p.StartInfo = psi
    20. p.Start()
    21. End Sub


    And i think to myself... what a wonderfuL World!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Eddy“ ()

    Ok, ich bin Gerade dabei deinen Code zu "Installieren"

    Nun muss ich wissen wie man ein Bild (.ico) aus den Ressourcen des Programmes in einen Ordner Kopiert
    Wichtig ist hierbei dass dies eine Bilddatei ist und Kein String

    Das ganze brauche ich damit ich das icon in einen Ordner kopieren kann von dem die datei endung das Icon Nimmt

    [Das mit den Admin Rechten habe ich jetzt drin]
    Begeisterter BF4 Spieler :D
    Weiß nicht, ob Du C# kannst, aber das lässt sich ja konvertieren: github.com/ProgTrade/nUpdate/t…ore/Application/Extension - Ist ursprünglich von CodeProject irgendwo übernommen.

    So geht das auch ohne CMD.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Gangsterkrafter
    Der Code von @Eddy macht nichts anderes wie dein alter Code nur über CMD befehle. Deshalb ist das so dann durty. Ich denke das ev. ein Neustart des Explorers das ganze Regestriert(sieht man manchmal bei Installationen) weis aber da keinen Bsp. Code(nur die CMD Befehle und die sind bei mir imner die letzte Wahl...)

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Ok, also Habe mal die "explorer.exe" Ueber den TskManager Beendet und wieder gestartet, Jedoch scheint dies anscheinend Nicht zu Funktionieren.

    @Trade, Ich bin nun auf dem Github deines nUpdate (den Link von dir) Welche Klassen wuerde ich Brauchen? (Ich hab Absolut Keine Ahnung von C#)
    Und die Frage ist ob das ganze Konvertiert werden kann mit zb. Diesem Converter Hier.
    <- Ist schon Geklaert Eddy's Code Funktioniert Ja :)

    @Mokki, Ich kann nicht Garantieren dass ich beim CMD nichts Falsch gemacht habe deshalb wollte ich es mit dem Code von Eddy Probieren :)





    EDIT: Eddys Code Funktioniert!


    Jetzt muss ich nurnoch wissen wie ich Ein Icon(.ico) Aus den Resourcen in einen Ordner Kopiere
    Begeisterter BF4 Spieler :D

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Gangsterkrafter“ ()

    Gangsterkrafter schrieb:

    Welche Klassen wuerde ich Brauchen?
    Na die im verlinkten Ordner.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: