Inno在应用程序之间共享默认组文件夹

问题描述:

我希望用户在Windows计算机上安装第一个应用程序时能够选择“组”文件夹/目录。如果/他们选择安装其他应用程序,我希望Inno安装程序找到用户安装到的第一个“组”文件夹/目录,并将该文件夹/目录放在建议的App文件夹/目录名称的开头安装第二个应用程序。如果用户更改了“组”文件夹,那么新的组文件夹应该保存为新的“默认”组文件夹以供任何后续安装(并且安装的第一个应用程序随后位于“孤立”文件夹中)。Inno在应用程序之间共享默认组文件夹

我希望这样做的方式是与“默认安装文件夹组”的注册表项?我已经链接到一个PNG图像,希望通过例子来澄清我的问题。

http://imgur.com/gallery/RHBZgMs/new

在Inno Setup的商店所选择的 “组” 文件夹中做出

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AppId_is1] 
"Inno Setup: Icon Group"="Group" 

(或者到HKEY_CURRENT_USER如果安装程序不具有管理员权限的启动)的安装程序。

请注意,路径是特定于应用程序的(AppId是安装程序的标识)。

因此,如果您决定使用此密钥,您将不得不扫描所有应用程序的密钥。而且你不知道最后一次安装了哪个应用程序。


所以我相信你应该创建自己的注册表项来存储组。

要保存选定的组,你可以用一个标准的Inno Setup的做[Registry]部分:

[Registry] 
Root: HKLM; Subkey: "Software\My Company"; ValueType: string; \ 
    ValueName: "GlobalGroup"; ValueData: "{groupname}" 

虽然加载它,你必须对它进行脚本:

[Code] 

procedure InitializeWizard(); 
var 
    GlobalGroup: string; 
begin 
    if RegQueryStringValue(
     HKEY_LOCAL_MACHINE, 'Software\My Company', 'GlobalGroup', GlobalGroup) then 
    begin 
    Log('Global group found: ' + GlobalGroup); 
    WizardForm.GroupEdit.Text := GlobalGroup; 
    end 
    else 
    begin 
    Log('Global group not found'); 
    end; 
end; 

注卸载所有应用程序时,注册表项不会被删除。所以全球集团在全球的卸载中幸存下来。如果这是一个问题,你将不得不实施一个引用计数器来处理这个问题。


如果我理解正确,你实际上只共享组名(第一级目录?)的一部分。因此,您在选择注册表中的内容时可能需要一些逻辑。在这种情况下,您最好使用脚本储存:

procedure CurStepChanged(CurStep: TSetupStep); 
var 
    GlobalGroup: string; 
begin 
    if CurStep = ssDone then 
    begin 
    GlobalGroup := ExpandConstant('{groupname}'); 
    Log('Saving global group: ' + GlobalGroup); 

    if RegWriteStringValue(HKEY_LOCAL_MACHINE, 'Software\My Company', 'GlobalGroup', GlobalGroup) then 
    begin 
     Log('Global group saved'); 
    end 
     else 
    begin 
     Log('Error saving global group'); 
    end; 
    end; 
end; 
+0

谢谢马丁。我会尝试一下你的建议,虽然它可能需要一些思考,因为我目前有一个InitializeWizard()函数,并通过一个对话框询问用户安装目录。因此,我必须首先去掉他们选择的任何目录的“路径”,将其保存到“GlobalGroup”注册表项(或者将其替换,如果存在)...对吗? – Arty

+0

不客气。虽然在StackOverflow我们[感谢接受和/或upvoting的答案](http://stackoverflow.com/help/someone-answers)。 –

+0

关于你的问题:是的。我添加了更多的代码,您可能需要。 –