Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inno setup 在Inno安装脚本中使用注册表项/值的一部分_Inno Setup_Registrykey - Fatal编程技术网

Inno setup 在Inno安装脚本中使用注册表项/值的一部分

Inno setup 在Inno安装脚本中使用注册表项/值的一部分,inno-setup,registrykey,Inno Setup,Registrykey,我需要根据先前安装在系统上的其他应用程序检索用于安装程序中某些内容的路径 此以前的应用程序承载服务,并且只提供一个承载此信息的注册表项/值:HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\application承载值ImagePath哪些数据是“E:\TestingDir\Filename.exe” 我需要一种方法,只提取安装路径(E:\TestingDir),而不提取Filename.exe文件 有什么建议吗? 非常感谢您可以使

我需要根据先前安装在系统上的其他应用程序检索用于安装程序中某些内容的路径

此以前的应用程序承载服务,并且只提供一个承载此信息的注册表项/值:
HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Services\application
承载值
ImagePath
哪些数据是
“E:\TestingDir\Filename.exe”

我需要一种方法,只提取安装路径(
E:\TestingDir
),而不提取
Filename.exe
文件

有什么建议吗?
非常感谢

您可以使用

您可以定义一个生成所需值的函数:

[代码]
函数GetServiceInstallationPath(参数:string):string;
变量
值:字符串;
开始
如果是RegQueryStringValue(
HKEY\U本地\U计算机“系统\CurrentControlSet\Services\APPLICATION”,
“ImagePath”,值)然后
开始
结果:=ExtractFileDir(值);
结束
其他的
开始
结果:={Some fallback value}
结束;
结束;
然后在需要的地方使用
{code:GetServiceInstallationPath}
引用它(如
[Run]
部分)

例如:

[Run]
Filename: "{code:GetServiceIntallationPath}\SomeApp.exe"

实际上,您可能希望检索已存在的值,并将该值缓存在全局变量中,以便在脚本常量中使用。如果未安装其他应用程序(=注册表项不存在),则中止安装(从
InitializeSetup
返回
False

[代码]
变量
ServiceInstallationPath:字符串;
函数InitializeSetup():Boolean;
变量
值:字符串;
开始
如果是RegQueryStringValue(
HKEY\U本地\U计算机“系统\CurrentControlSet\Services\APPLICATION”,
“ImagePath”,值)然后
开始
ServiceInstallationPath:=ExtractFileDir(值);
日志(格式('应用程序安装到%s',[ServiceInstallationPath]);
结果:=真;
结束
其他的
开始
MsgBox('未安装应用程序,正在中止安装',mbError,MB_OK);
结果:=假;
结束;
结束;
函数GetServiceInstallationPath(参数:string):string;
开始
结果:=ServiceInstallationPath;
结束;

另请参见类似的问题:.

以这种方式解决: [守则] 变量 ServiceInstallationPath:字符串

function MyProgCheck(): Boolean;
var
  Value: string;
begin
  if RegQueryStringValue(
       HKEY_LOCAL_MACHINE, 'SYSTEM\ControlSet001\Services\JLR STONE VCATS TO MES',
       'ImagePath', Value) then
  begin
    ServiceInstallationPath := ExtractFileDir(Value);   
    Result := True;
  end
  else
  begin
    Result := False;
  end;
end;

在[运行]部分,我根据需要检查此函数的正确条件或错误条件…谢谢大家的回答

您可以使用pascal脚本;RegQueryStringValue()获取字符串中的路径,然后使用ExtractFileDir()获取目录部分。好主意!代码部分中定义的变量是否也将在Rn部分中读取?不清楚如何将运行部分中的内容与pascal代码中的所有内容连接起来…谢谢!此外,问题是我需要读取目标计算机(安装位置)中注册表的值,而extractfiledir(如果我记得很好)将在编译计算机(源代码)中提取值,不是吗?谢谢againHi Martin,这对我帮助很大!更重要的是,如果注册表不存在,则跳过安装:其思想是,如果注册表存在,则使用路径将一些文件放入。另一方面,如果注册表不存在,则执行一组操作(最后也将生成注册表)。因此InitializeSetup()在注册表不存在的情况下没有帮助。对于这个范围,您还有什么其他建议吗?关于,功能是什么?我不知道你需要做什么手术。不管怎么说,这是一个不同的问题,解释得更好。