Inno setup 正在运行脚本代码(添加注册表项),而不是在Inno安装程序的运行项中运行可执行文件

Inno setup 正在运行脚本代码(添加注册表项),而不是在Inno安装程序的运行项中运行可执行文件,inno-setup,pascalscript,Inno Setup,Pascalscript,我想在用户接受注册表项添加后添加注册表项。 该键将告诉Firefox在哪里可以找到我们的插件(该插件存储在app文件夹中) 用户将得到一个复选框“安装ff插件”,其形式与我们询问“安装chrome插件”和“安装ie插件”的形式相同 [代码] 函数GetHKLM:Integer; 开始 如果是Win64,那么 结果:=HKLM64 其他的 结果:=HKLM32; 结束; 函数CheckForMozilla:Boolean; 开始 结果:=假; 如果RegKeyExists(GetHKLM(),'S

我想在用户接受注册表项添加后添加注册表项。 该键将告诉Firefox在哪里可以找到我们的插件(该插件存储在app文件夹中)

用户将得到一个复选框“安装ff插件”,其形式与我们询问“安装chrome插件”和“安装ie插件”的形式相同

[代码]
函数GetHKLM:Integer;
开始
如果是Win64,那么
结果:=HKLM64
其他的
结果:=HKLM32;
结束;
函数CheckForMozilla:Boolean;
开始
结果:=假;
如果RegKeyExists(GetHKLM(),'SOFTWARE\Mozilla\Mozilla Firefox'),则
开始
结果:=真;
结束;
如果RegKeyExists(GetHKLM(),'SOFTWARE\Mozilla\Firefox'),则
开始
结果:=真;
结束;
结束;
函数AddFFKey:Boolean;
开始
{在代码段中写入此键的某种方法:}
GetHKLM()+'\SOFTWARE\Mozilla\Mozilla Firefox\extensions\5e12c5a…'
结束;
谢谢大家!
Steve

您可以通过实现并用脚本过程调用替换可执行调用来捕获Finish按钮单击

#定义InstallFFPluginDesc“安装firefox插件”
[运行]
文件名:“fake.exe”;标志:安装后;描述:“{InstallFFPluginDesc}”\
支票:CheckForMozilla
[守则]
程序AddFFKey;
开始
日志(“添加FF密钥”);
RegWriteStringValue(
GetHKLM(),“SOFTWARE\Mozilla\Mozilla Firefox\extensions\5e12c5a…,”;
结束;
函数NextButtonClick(CurPageID:Integer):布尔值;
变量
索引:整数;
开始
如果CurPageID=wpFinished,则
开始
{需要重新启动时,永远不会填充/显示运行列表。}
如果WizardForm.RunList.Items.Count>0,则
开始
{查找FF插件的运行列表项}
索引:=WizardForm.RunList.Items.IndexOf(“{InstallFFPluginDesc}”);
{它是否存在,是否已检查?}
如果(索引>=0)和WizardForm.RunList.Checked[Index],则
开始
{取消选中,以便不运行fake.exe}
WizardForm.RunList.Checked[Index]:=False;
{改为执行脚本操作}
AddFFKey;
结束;
结束;
结束;
结果:=真;
结束;

另一种选择是添加一个正常工作的noop
[Run]
条目,并使用来调用脚本代码

这是一个更简单、更健壮的解决方案,只是有一个副作用(您必须运行一些流程,即使它不需要做任何事情)

[运行]
文件名:“{cmd}”;参数:“/C echo noop”;标志:安装后运行隐藏\
Description:“安装firefox插件”;检查:CheckForMozilla\
安装前:AddFFKey
[守则]
程序AddFFKey;
开始
日志(“添加FF密钥”);
...
结束;

我相信你的
GetHKLM
逻辑是错误的。Firefox总是写入32位注册表

您可以通过实现并用脚本过程调用替换可执行调用来捕获Finish按钮单击

#定义InstallFFPluginDesc“安装firefox插件”
[运行]
文件名:“fake.exe”;标志:安装后;描述:“{InstallFFPluginDesc}”\
支票:CheckForMozilla
[守则]
程序AddFFKey;
开始
日志(“添加FF密钥”);
RegWriteStringValue(
GetHKLM(),“SOFTWARE\Mozilla\Mozilla Firefox\extensions\5e12c5a…,”;
结束;
函数NextButtonClick(CurPageID:Integer):布尔值;
变量
索引:整数;
开始
如果CurPageID=wpFinished,则
开始
{需要重新启动时,永远不会填充/显示运行列表。}
如果WizardForm.RunList.Items.Count>0,则
开始
{查找FF插件的运行列表项}
索引:=WizardForm.RunList.Items.IndexOf(“{InstallFFPluginDesc}”);
{它是否存在,是否已检查?}
如果(索引>=0)和WizardForm.RunList.Checked[Index],则
开始
{取消选中,以便不运行fake.exe}
WizardForm.RunList.Checked[Index]:=False;
{改为执行脚本操作}
AddFFKey;
结束;
结束;
结束;
结果:=真;
结束;

另一种选择是添加一个正常工作的noop
[Run]
条目,并使用来调用脚本代码

这是一个更简单、更健壮的解决方案,只是有一个副作用(您必须运行一些流程,即使它不需要做任何事情)

[运行]
文件名:“{cmd}”;参数:“/C echo noop”;标志:安装后运行隐藏\
Description:“安装firefox插件”;检查:CheckForMozilla\
安装前:AddFFKey
[守则]
程序AddFFKey;
开始
日志(“添加FF密钥”);
...
结束;

我相信你的
GetHKLM
逻辑是错误的。Firefox总是写入32位注册表

[Run]
Filename: AddFFKey; Flags: runascurrentuser postinstall ; \
    Check: CheckForMozilla; Description: "Install firefox plug-in"