当前位置: 首页 > 知识库问答 >
问题:

Inno设置:在设置过程中重新启动不会在重新启动后启动

柳奇思
2023-03-14

我用Inno Setup做了一个安装程序,在一些文件运行后我需要重启电脑,所以我用了这篇文章中的解决方案。

inno安装示例“CodePrepareToInstall”。iss运行良好,所以我使用了代码进行测试安装,但计算机重新启动后安装程序无法启动。

两个安装程序(inno demo和我的测试)都在“HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce”中添加了一个注册表项,唯一的区别是附加值。我的刺痛比inno演示中添加的字符串要长得多。

registry/runonce中有值长度限制吗?

Inno Demo Value:
"C:\Users\Admin\Documents\Inno Setup Examples Output\setup.exe" /restart=1 /LANG=default /DIR="C:\Program Files (x86)\My Program" /GROUP="My Program"

My Installer Value:
"C:\Users\Admin\Documents\Inno Setup Projekte\Treiber Test\bin\Driver Test Setup.exe" /restart=1 /LANG=german /DIR="C:\Driver" /GROUP="Driver Test Setup" /TYPE="full" /COMPONENTS="1234driverinstaller,audio,bluetooth,chipset,devicepowermanager,gps,inputmanagementservice,modem,lan,1234powerplan,touchscreen,vga,wlan,wwan,1234products"

共有1个答案

司空奕
2023-03-14

想通了。Windows对从HKLU或HKLM的RunOne注册表运行的命令有256个字符的限制。

所以我决定创建一个批处理文件来启动我的安装程序并在之后自行删除它。所以我只需要将批处理的路径传递给RunOne注册表。

InnoScript:

procedure CreateRunOnceEntry;
var
    RunOnceData: String;
begin
    RunOnceData := 'echo off' + #13#10;
    RunOnceData := RunOnceData + 'start "" ';
    RunOnceData := RunOnceData + Quote(ExpandConstant('{srcexe}')) + ' /restart=1';
    RunOnceData := AddParam(RunOnceData, 'LANG', ExpandConstant('{language}'));
    RunOnceData := AddParam(RunOnceData, 'DIR', Quote(WizardDirValue));
    RunOnceData := AddParam(RunOnceData, 'GROUP', Quote(WizardGroupValue));
    if WizardNoIcons then
        RunOnceData := AddSimpleParam(RunOnceData, 'NOICONS');
    RunOnceData := AddParam(RunOnceData, 'TYPE', Quote(WizardSetupType(False)));
    RunOnceData := AddParam(RunOnceData, 'COMPONENTS', Quote(WizardSelectedComponents(False)));
    RunOnceData := AddParam(RunOnceData, 'TASKS', Quote(WizardSelectedTasks(False)));
    RunOnceData := RunOnceData + #13#10 + 'start /b cmd.exe /c del %0' + #13#10 + 'exit';

    SaveStringToFile(ExpandConstant('{commonappdata}\StartInstallation.cmd'), RunOnceData, True);

    if not IsWin64 then
        RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName, ExpandConstant('{commonappdata}\StartInstallation.cmd'));
    if IsWin64 then
        RegWriteStringValue(HKLM, 'Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName, ExpandConstant('{commonappdata}\StartInstallation.cmd'));
end;

批处理文件:

echo off
start "" "C:\Users\Admin\Documents\Inno Setup Projekte\Treiber Test\bin\Driver Test Setup.exe" /restart=1 /LANG=german /DIR="C:\Driver" /GROUP="Driver Test Setup" /TYPE="full" /COMPONENTS="1234driverinstaller,audio,bluetooth,chipset,devicepowermanager,gps,inputmanagementservice,modem,lan,1234powerplan,touchscreen,vga,wlan,wwan,1234products"
start /b cmd.exe /c del %0
exit
 类似资料:
  • docker守护进程在我的计算机(Linux/Centos 7)上不再启动了,我强烈怀疑在这种情况下是一个设置为自动重启的容器造成的。如果我手动启动守护进程,我看到的最后一行是“装载容器:启动”,然后它只是挂起。 我想做的是在不启动任何容器的情况下启动守护进程。但我找不到任何选择。在docker中是否有任何选项可以启动守护进程而不将启动容器设置为自动重启?如果没有,是否有一种方法可以手动移除容器,

  • 问题内容: 我正在使用CSS着色器+动画。我的着色器类定义如下: 我正在尝试使用jQuery通过和动态设置/取消设置样式(shader + animation) 但是,奇怪的是,当我重置类时(例如,在removeClass之后调用addClass),仅重新应用了着色器,而没有应用动画(我已钩住AnimationStart事件以查看动画何时开始)。有人知道为什么会这样吗,我该如何解决? 编辑:我在这

  • 我有以下系统脚本: 运行命令:systemctl start/stop hub工作正常。我还使用systemctl启用集线器创建了符号链接。为什么我的服务在我重新启动整个笔记本电脑后没有启动?我遵循了docker指南,以便Docker在重新启动时启动,但由于某种原因我的容器没有启动。我的脚本中缺少一个字段吗? 我正在使用ExecStart,“/home/hub/hub.sh”脚本的命令是: 重新启

  • 问题内容: 我很难找到一种方法来启动,停止和重新启动Java中的线程。 具体来说,我在中有一个类Task(当前实现)。我的主应用程序需要能够在线程上启动此任务,在需要时停止(杀死)该线程,有时还可以杀死并重新启动该线程… 我的第一次尝试是与,但我似乎找不到办法重新启动任务。当我使用任何将来的呼叫失败时,因为是“关机” … 那么,我该怎么做呢? 问题答案: 一旦线程停止,你将无法重新启动它。但是,没

  • 我正在使用CentOS 6.3 64位计算机。我在catalina.sh export catalina_opts=“-dcom.sun.management.jmxremote=true-dcom.sun.management.jmxremote.port=7010-dcom.sun.management.jmxremote.ssl=false-dcom.sun.management.jmxre