Pascal Inno Setup - Dateizuordnung

pcblizzard

Captain
Registriert
Nov. 2006
Beiträge
3.681
Hi,

ich bin's mal wieder. :rolleyes:

Ich würde gerne nach der Installation eines Programms die Dateiendung einem anderen Programm zuweisen (z.B. ".ain"-Endung direkt mit dem "Hammer Editor" öffnen (und nicht dass der User nach dem Klicken auf die ".aim"-Datei den "Öffnen mit" Dialog zu sehen bekommt - der Hammer Editor wird bei der Installation mitinstalliert)).
Ich habe zwar schon bissl was probiert (https://stackoverflow.com/questions/26536030/inno-setup-file-association) aber bisher hat nichts funktioniert. Jede Windows-Version ab "Windows XP SP3" sollte unterstützt werden.

Code:
 Root: HKCR; Subkey: ".mpl"; ValueType: string; ValueName: ""; ValueData: "{#MyAppName}"; Flags: uninsdeletevalue
    Root: HKCR; Subkey: ".tvd"; ValueType: string; ValueName: ""; ValueData: "{#MyAppName}"; Flags: uninsdeletevalue
    Root: HKCR; Subkey: ".log"; ValueType: string; ValueName: ""; ValueData: "{#MyAppName}"; Flags: uninsdeletevalue
    Root: HKCR; Subkey: "{#MyAppName}"; ValueType: string; ValueName: ""; ValueData: "MyView"; Flags: uninsdeletekey
    Root: HKCR; Subkey: "{#MyAppName}\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\delta.ico,0"
    Root: HKCR; Subkey: "{#MyAppName}\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""

Vielleicht hat jemand genug Wissen um mir auf die Sprünge zu helfen.


Vielen Dank im voraus
 
Zuletzt bearbeitet:
So mache ich es in meinem Mediaplayer Xenorate - um die Mediendateien zu registrieren beim Setup (Play und Add sind Mediaknoten, die wirst du vermutlich nicht brauchen):

Code:
[Registry]
Root: HKCR; Subkey: ".wav"; ValueType: string; ValueName: ""; ValueData: "Xenorate.WAV"; Flags: uninsdeletevalue; Tasks: associate
Root: HKCR; Subkey: "Xenorate.WAV"; ValueType: string; ValueName: ""; ValueData: "Wavestream (*.wav)"; Flags: uninsdeletekey; Tasks: associate
Root: HKCR; Subkey: "Xenorate.WAV\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\data\icons\wav.ico,0"; Tasks: associate
Root: HKCR; Subkey: "Xenorate.WAV\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\xenorate.exe"" %1"; Tasks: associate
Root: HKCR; Subkey: "Xenorate.WAV\shell\Add"; ValueType: string; ValueName: ""; ValueData: "{cm:_AddToXenorate}"; Tasks: associate
Root: HKCR; Subkey: "Xenorate.WAV\shell\Add\command"; ValueType: string; ValueName: ""; ValueData: """{app}\xenorate.exe"" /add %1"; Tasks: associate
Root: HKCR; Subkey: "Xenorate.WAV\shell\Play"; ValueType: string; ValueName: ""; ValueData: "{cm:_PlayWithXenorate}"; Tasks: associate
Root: HKCR; Subkey: "Xenorate.WAV\shell\Play\command"; ValueType: string; ValueName: ""; ValueData: """{app}\xenorate.exe"" /play %1"; Tasks: associate

Besser ist allerdings das per Code zu lösen, weil man immer ein Backup vom aktuellen Standardprogramm machen sollte - keine Ahnung ob das Innosetup irgendwie automatisch macht:

(Code ist Pur-Delphi, benötigt Anpassungen für Innosetup)
Code:
function TXenorateElevation.RegisterFileType(const ext, exe, ico, addName,
  playName: WideString): HResult;
var
  reg : TRegistry;
  old : String;
  xprefix : String;
begin
  Result := S_OK;
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;

    xprefix := 'Xenorate' + ext;

    if reg.OpenKey(ext, True) then
    begin
      old := reg.ReadString('');
      reg.Writestring('Xenorate.Backup', old);
      reg.Writestring('', xprefix);
      reg.CloseKey;
    end;

    if reg.OpenKey(xprefix + '\DefaultIcon', True) then
    begin
      reg.Writestring('', ico + ',0');
      reg.CloseKey;
    end;

    if reg.OpenKey(xprefix + '\shell', True) then
    begin
      reg.Writestring('', 'Open');
      reg.CloseKey;
    end;

    if reg.OpenKey(xprefix + '\shell\Open\command', True) then
    begin
      reg.Writestring('', '"'+exe + '" %1');
      reg.CloseKey;
    end;

    if reg.OpenKey(xprefix + '\shell\Play', True) then
    begin
      reg.WriteString('', playName);
      reg.CloseKey;
    end;

    if reg.OpenKey(xprefix + '\shell\Play\command', True) then
    begin
      reg.Writestring('', '"'+exe + '" /play %1');
      reg.CloseKey;
    end;

    if reg.OpenKey(xprefix + '\shell\Add', True) then
    begin
      reg.WriteString('', addName);
      reg.CloseKey;
    end;

    if reg.OpenKey(xprefix + '\shell\Add\command', True) then
    begin
      reg.Writestring('', '"'+exe + '" /add %1');
      reg.CloseKey;
    end;
  finally
    reg.Free;
  end;
end;
 
Zuletzt bearbeitet:
Sehr cool, Danke. Mit dem [*Code] hat es geklappt
 
Zurück
Oben