Beantwortet Dateiendung registrieren: Icon fehlt

  • Mittwoch, 12. September 2012 12:15
     
      Enthält Code

    Guten Tag,

    ich nutze die Dateiendung *.rbw als Format für mein Programm. Es enthalt Koordinaten und andere Inhalte (das Ganze ist natürlich verschlüsselt). Beim öffnen einer 'rbw' Datei öffnet sich mein Programm und ließt die Informationen. Das Einzige was fehlerhaft ist ist der Icon des Formats. Ich habe den Pfad überprüft und testweise auch geändert, ich habe den Icon gewechselt und Größe verändert. Es klappt einfach nicht. Der Icon hat die Größe 64x64 Pixel und außerdem ist die Funktion (unten) nicht von mir geschrieben, dass ist der Grund weswegen ich nicht weiterkomme.

    Private Function Registerfile(ByVal endung As String, ByVal namedesdateityps As String, ByVal pfadzuprogramm As String, ByVal pfadzuicon As String) As Boolean
            Try
                Dim objSubKey As Microsoft.Win32.RegistryKey
                Dim objSubKey2 As Microsoft.Win32.RegistryKey
                Dim Wert As String = namedesdateityps
                Dim sKey As String = endung
                Dim sKey2 As String = endung & "\ShellNew"
                Dim sEntry As String = "Content Type"
                Dim sValue As String = "text/plain"
                Dim sEntry2 As String = "PerceivedType"
                Dim sValue2 As String = "text"
                Dim sEntry3 As String = "Nullfile"
                objSubKey = My.Computer.Registry.ClassesRoot.CreateSubKey(sKey)
                objSubKey.SetValue("", Wert)
                objSubKey.SetValue(sEntry, sValue)
                objSubKey.SetValue(sEntry2, sValue2)
                objSubKey2 = My.Computer.Registry.ClassesRoot.CreateSubKey(sKey2)
                objSubKey2.SetValue(sEntry3, "")
    
                Dim objSubKey3 As Microsoft.Win32.RegistryKey
                Dim sKey3 As String = namedesdateityps
                Dim sKey4 As String = namedesdateityps & "\shell\open\command"
                Dim skey5 As String = namedesdateityps & "\DefaultIcon"
                Dim sValue3 As String = namedesdateityps
                Dim objSubKey5 As Microsoft.Win32.RegistryKey
                Dim sValue5 As String = """" + pfadzuprogramm + """" + " %1"
                Dim sValue6 As String = """" & pfadzuicon & """" & "%1"
                Dim objSubKey4 As Microsoft.Win32.RegistryKey
    
                objSubKey3 = My.Computer.Registry.ClassesRoot.CreateSubKey(sKey3)
                objSubKey3.SetValue("", sValue3)
                objSubKey4 = My.Computer.Registry.ClassesRoot.CreateSubKey(sKey4)
                objSubKey4.SetValue("", sValue5)
                objSubKey5 = My.Computer.Registry.ClassesRoot.CreateSubKey(skey5)
                objSubKey5.SetValue("", sValue6)
    
                Return True
            Catch ex As Exception
                Return False
            End Try
        End Function

    Und im Formload steht :

     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If Optionen.CheckBox1.Checked = True Then
                If Registerfile(".rbw", "RainbowFile", Application.StartupPath & "\RbwConverter.exe", Application.StartupPath & "\Rainbow.ico") Then
                Else
                    MessageBox.Show("An error occured during the register of the Rainbow-Format." & vbCrLf & "Try to run this application with the administrator or turn the registration off [Options>Registration on/off].", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                End If
    End Sub

    Ich hoffe Sie können mir helfen.

    MFG Fabian



    • Bearbeitet Fabian89 Mittwoch, 12. September 2012 12:16
    • Bearbeitet Fabian89 Mittwoch, 12. September 2012 12:35
    •  

Alle Antworten

  • Mittwoch, 12. September 2012 13:02
     
     

    Hi Farbian_96,

    die Methode macht nichts anderes als Einträge in der Registry zu erzeugen.

    Ohne den Code wo du den Icon lädes bzw Anzeigst, kann man schwer was sagen.

    MFG

    Björn

  • Mittwoch, 12. September 2012 13:30
     
     
    Es macht für den Icon einen Eintrag : DefaultIcon . Darin ist der Pfad des Icons. Mehr ist nicht angegeben, ich würde der Datei *.rbw den Icon zuweisen also im Explorer oder auf dem Desktop soll der Icon für die Datei angezeigt werden.
  • Mittwoch, 12. September 2012 13:44
     
      Enthält Code

    Hi Farbian_96,

    ok jetzt hab ich dich, ich dachte erst in deinem Programm würde das Icon nicht Angezeigt.

    Hier mal die Codezeile mit der du das machen kannst:

        Registry.ClassesRoot.CreateSubKey(fileTypeName + "\\DefaultIcon").SetValue("", path + " ,0 ", Microsoft.Win32.RegistryValueKind.ExpandString); 
    Hier die Quelle.
     

    MFG

    Björn

  • Mittwoch, 12. September 2012 14:04
     
     
    Es klappt immernoch nicht. Ich habe im Registrierungseditor geguckt unter dem Format ist ein Ordner DefaultIcon mit dem Pfad z.B. C:\a.ico,0
  • Mittwoch, 12. September 2012 14:55
     
     

    Hi Farbian,

    lösche mal den Eintrag und schau ob er beim Aufruf den gleichen Eintrag wider Erzeugt.

    Wenn ja schau mal in deinem Programm nach ob zu Späteren Zeitpunkt, noch mal die Funktion aufgerufen wird nur mit dem Parameter a.ico.

    MFG

    Björn

  • Mittwoch, 12. September 2012 15:08
     
     
    Nein ich nutze diese Funktion nur 1 mal . Hab den Eintrag gelösht und nochmal gemacht.. Es will nicht ):
  • Mittwoch, 12. September 2012 15:21
     
     
    Es kommt dieses Bild   und das ist leider nicht mein Icon.
  • Mittwoch, 12. September 2012 15:24
     
     

    Wurde der Eintrag noch mal erstellt. Mit den gleichen werten. "C:\a.ico,0"

    Dann kopiere mal dein Icon nach C:\ und benenne es in a.ico um.

    MFG

    Björn

  • Mittwoch, 12. September 2012 15:31
     
     
    Hab ich getestet es klappt nicht . Ich bin ehrlich ziemlich ratlos momentan.
  • Mittwoch, 12. September 2012 15:35
     
     

    Mach bitte mal einen Screeshot von der Registry.

    So das der Pfad und der Wert im DefaultIcon Ordner zu sehen ist.

    MFG

    Björn

  • Mittwoch, 12. September 2012 15:35
     
      Enthält Code
    Ich habe jetzt dort stehen:
      Registry.ClassesRoot.CreateSubKey(".rbw" + "\\DefaultIcon").SetValue("", "c:\bitte.ico" + " ,0 ", Microsoft.Win32.RegistryValueKind.ExpandString)

  • Mittwoch, 12. September 2012 15:36
     
     
    Also zusätzlich zu den anderen Schlüsseln
  • Mittwoch, 12. September 2012 16:49
    Moderator
     
     Beantwortet Enthält Code

    Hallo,

    ich kenne ein ähnliches Problem, mit anderen Dateitypen (Word, Excel, ...) Hast du mal den PC neu gestartet? Der Windows Explorer lädt einen Cache aller Symbole, deines war beim Start da ja noch nicht drinn. Bei einem Neustart sollte in der Theorie der Cache geleert werden.

    Wenn es nach einem Neustart nicht geht, könntest du ja mal versuchen die thumb.db zu löschen, wenn Sie existiert, diese Speichert Vorschaubilder für den Explorer ab (Liegt in jedem Ordner eine, also nur im Debug-Verzeichnis, o.ä.)

    Bei mir hat testweise folgender Code funktioniert:

    Registry.ClassesRoot.CreateSubKey(".rbw" & "\DefaultIcon").SetValue("", "C:\test.ico", Microsoft.Win32.RegistryValueKind.ExpandString)

    Ich hoffe, das hilft dir weiter.

    PS: warum denn ein doppelter Backslash?
    (".rbw" + "\\DefaultIcon")
    Ich dachte du machst VB.NET, da wäre es nur \, da es nicht als Escape Sequenz gewertet wird.

    Koopakiller - http://koopakiller.ko.ohost.de/


  • Mittwoch, 12. September 2012 17:51
     
     

    Hi Koopakill,

    der doppelte Blackslash kommt von deinem C# Beispiel.

    Siehe den Link den ich oben gepostet habe.

    MFG

    Björn

  • Mittwoch, 12. September 2012 20:06
    Moderator
     
     

    OK, so ist das schon logischer, es ist nur heimtückisch, wenn man das nicht mitbekommt und auch das + nicht vom & unterscheiden kann... so wie ich.

    PS: Den Quellcode von dem Beispiel habe ich auf XP, Vista und Windows 7 erfolgreich getestet.


    Koopakiller - http://koopakiller.ko.ohost.de/

  • Donnerstag, 13. September 2012 12:48
     
     

    Nein es funktioniert immernoch nicht. Muss der Icon etwas bestimmtes erfüllen ? Eine bestimmte Größe vielleicht ? Ich hab es nur mit 16x16 , 32x32 und 64x64 und 100x100 getestet.

    Ich habe im Registrierungseditor alles nachgelesen, die Pfaden und sonstiges stimmt alles, ich weiß echt nicht weiter.

  • Donnerstag, 13. September 2012 12:53
     
     
    Ich habe es grad als Test mit *.alpha getestet .. das klappt. Ich propiere es nochmals .
  • Donnerstag, 13. September 2012 13:00
     
     
    Also es klappt auch wenn ich .rbw im Reg.Editor in .rbwc umbenenne . Was muss ich machen damit es mit der ursprünglichen Endung .rbw funktioniert ?
  • Donnerstag, 13. September 2012 13:05
    Moderator
     
     Beantwortet

    Hallo,

    Bezüglich den Größen kann ich nur agen 16, 32 und 48 sind die Standartgrößen für Windows 7, die sollten auch Alpha haben. 256 Pixel ist die "Extra große Schaltflächen" Einstellung im Explorer.

    Kannst du mal mein Beispiel aus der MSDN Gallery testen, den Link hatte Palin schonmal als Quelle gepostet:
    http://code.msdn.microsoft.com/.../Dateiassoziationen-mit-C-41c6968e

    Ich bin mir zwar nicht sicher, aber

    Ab Windows 7 werden durch den Benutzer festgelegte programme unter HKEY_CURRENT_USER\Software\Microsoft\ Windows\CurrentVersion\Explorer\FileExts gespeichert. Das sollten Sie bei einer wiederherstellung der Dateiassoziationen beachten, denn diese gehen vor den unter HKEY_CLASSES_ROOT definiertes Assoziationen vor.

    Vielleicht ist rbw bei dir ja schon von rgendwas mal registruiert gewesen, vlt. Testweise hast du es mal von Hand zugewiesen und erst danach den eigenen Mechanismuzs Dafür geschrieben?


    Koopakiller - http://koopakiller.ko.ohost.de/

    • Als Antwort markiert Fabian89 Freitag, 14. September 2012 11:50
    •  
  • Donnerstag, 13. September 2012 14:33
     
     

    Im Openfiledialog des Programms wird der Icon der Datei angezeigt, nur im Ordner nicht bzw auf dem Desktop.

  • Donnerstag, 13. September 2012 15:01
     
     
    Ich hatte vor der Registrierung eine Datei mit der Endung .rbw auf dem Computer
  • Freitag, 14. September 2012 11:49
     
     
    Ah ah ah Es klappt endlich. Ich bedanke mich vielmals für Ihre Hilfe.