Dateierweiterung mit Anwendung verknüpfen
Ich habe ein Programm geschrieben, dass Bearbeitungen eines bestimmten Dateityps , und ich möchte dem Benutzer die Möglichkeit, meine Anwendung als Standard-editor für diesen Dateityp (da ich nicht möchte, ein Installationsprogramm) gestartet.
Ich habe versucht zu schreiben, ein re-useable Methode, dass die Mitarbeiter eine Datei für mich (am besten auf jedem OS, auch wenn ich auf denen Vista ausgeführt wird), indem Sie einen Schlüssel HKEY_CLASSES_ROOT, und benutze es mit meiner Bewerbung, aber es scheint nicht zu funktionieren.
public static void SetAssociation(string Extension, string KeyName, string OpenWith, string FileDescription)
{
RegistryKey BaseKey;
RegistryKey OpenMethod;
RegistryKey Shell;
RegistryKey CurrentUser;
BaseKey = Registry.ClassesRoot.CreateSubKey(Extension);
BaseKey.SetValue("", KeyName);
OpenMethod = Registry.ClassesRoot.CreateSubKey(KeyName);
OpenMethod.SetValue("", FileDescription);
OpenMethod.CreateSubKey("DefaultIcon").SetValue("", "\"" + OpenWith + "\",0");
Shell = OpenMethod.CreateSubKey("Shell");
Shell.CreateSubKey("edit").CreateSubKey("command").SetValue("", "\"" + OpenWith + "\"" + " \"%1\"");
Shell.CreateSubKey("open").CreateSubKey("command").SetValue("", "\"" + OpenWith + "\"" + " \"%1\"");
BaseKey.Close();
OpenMethod.Close();
Shell.Close();
CurrentUser = Registry.CurrentUser.CreateSubKey(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" + Extension);
CurrentUser = CurrentUser.OpenSubKey("UserChoice", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
CurrentUser.SetValue("Progid", KeyName, RegistryValueKind.String);
CurrentUser.Close();
}
Jede Idee, warum es nicht funktioniert? Ein Beispiel verwenden könnte
SetAssociation(".ucs", "UCS_Editor_File", Application.ExecutablePath, "UCS File");
Den Teil der Methode, um mit "CurrentUser" scheint zu funktionieren wenn ich das gleiche tun mit regedit, aber mit meiner Anwendung nicht.
InformationsquelleAutor der Frage User2400 | 2010-04-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort war viel einfacher, als ich erwartet hatte. Windows-Explorer hat seine eigene überschreiben, die für das öffnen mit der Anwendung, und ich war versucht, es zu ändern, in den letzten Zeilen von code. Wenn Sie löschen Sie einfach den Explorer überschreiben, dann wird die Datei Verein wird die Arbeit.
Habe ich auch gesagt, explorer, ich hatte eine Datei geändert association durch aufrufen von nicht verwalteten Funktion
SHChangeNotify()
InformationsquelleAutor der Antwort User2400
Können Sie das nicht in einem verwaltet Weg über ClickOnce. Kein Getue mit der Registrierung selbst. Diese ist verfügbar über das tooling (d.h. nicht xml -) in VS2008 und höher (auch Express) auf Projekt-Eigenschaften => Veröffentlichen => Optionen => Datei-Assoziationen
InformationsquelleAutor der Antwort Marc Gravell
Hier ist ein vollständiges Beispiel:
InformationsquelleAutor der Antwort Kirill Osenkov
Wenn Sie schreiben, die Tasten in
HKEY_CURRENT_USER\Software\Classes
stattHKEY_CLASSES_ROOT
sollte diese Arbeit ohne Administratorrechte unter Vista und höher.InformationsquelleAutor der Antwort gammelgul
Lösung oben hat bei mir nicht funktioniert, mit Windows 10.
Hier ist meine Lösung zum öffnen von Dateien mit der .myExt Erweiterung mit %localappdata%\MyApp\MyApp.exe für den aktuellen Benutzer. Optimiert nach dem Lesen Kommentare.
InformationsquelleAutor der Antwort sofsntp
Verwenden Sie eine alte version von Visual Studio, Vista wird zur Behandlung von Ihrem Programm als "legacy" - Windows-app. Und leiten Sie die registry schreibt, die Sie machen. Gehören ein manifest in Ihrem Programm, so dass Sie sehen Vista-bewusst. Dieses manifest wird automatisch von VS2008 und.
Beachten Sie, dass dies noch nicht das problem lösen, für Ihre Nutzer, Sie ist sehr unwahrscheinlich, führen Sie Ihre app mit UAC ausgeschaltet. Sie schreiben müssen, eine separate app, die ein manifest als verbunden und fragt nach Administratorrechten. Es muss die manifest-Datei mit requestedExecutionLevel-set zu requireAdministrator.
InformationsquelleAutor der Antwort Hans Passant
Wenn Sie mithilfe von Visual Studio 2015 installieren Sie dann die setup-und deployment-Erweiterung. Erstellen Sie eine Setup-Assistenten, und fügen Sie dann Ihre .exe-Datei zu. Rechten klicken Sie auf Ihrem Haupt-Programm im Projektmappen-explorer unter -Ansicht-Dateitypen, und klicken Sie dann rechts auf die Datei-Typen, und wählen Sie add new file type. Ändern Sie alle Eigenschaften, um Ihre Bedürfnisse und erstellen Sie dann den MSI-installer.
HINWEIS: ich Las Ihre Frage und merkte, dass Sie nicht möchte, dass ein installer. Tut mir Leid, dass, obwohl Sie in Betracht ziehen sollten, weil es gibt noch viel mehr Anpassung über Ihr Programm(s).
InformationsquelleAutor der Antwort TheMCProgrammer