Inno setup 如何使用Inno Setup在网络连接/断开事件上添加计划任务

Inno setup 如何使用Inno Setup在网络连接/断开事件上添加计划任务,inno-setup,windows-task-scheduler,Inno Setup,Windows Task Scheduler,我想在程序安装中使用Inno Setup,我需要Inno Setup在Windows任务计划程序中创建一个任务,以便在每次internet连接时启动我的program.exe 我可以,但我想让Inno安装程序通过。 这是我的inno设置代码() #定义MyAppName“桌面” #定义MyAppVersion“2” #定义MyAppPublisher“MH” #定义MyAppExeName“Desktop.exe” [设置] AppId={{EFBBA2D3-C6F0-4D3D-BBD5-5AF

我想在程序安装中使用Inno Setup,我需要Inno Setup在Windows任务计划程序中创建一个任务,以便在每次internet连接时启动我的
program.exe

我可以,但我想让Inno安装程序通过。 这是我的inno设置代码()

#定义MyAppName“桌面”
#定义MyAppVersion“2”
#定义MyAppPublisher“MH”
#定义MyAppExeName“Desktop.exe”
[设置]
AppId={{EFBBA2D3-C6F0-4D3D-BBD5-5AF126C3E8E9}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=设置程序2
压缩=lzma
SolidCompression=是
PrivilegesRequired=admin
[语文]
名称:“英语”消息文件:“编译器:Default.isl”
[任务]
名称:“desktopicon”说明:“{cm:CreateDesktopIcon}”;组说明:“{cm:AdditionalIcons}”;标志:未选中
[档案]
来源:“E:\IdeaProjects\Desktop\Desktop.exe”DestDir:“{app}”标志:ignoreversion
[图标]
名称:{group}{{MyAppName};文件名:{app}{{MyAppExeName}”
名称:{group}{cm:UninstallProgram,{MyAppName}};文件名:{uninstallexe}
名称:{commondesktop}{#MyAppName};文件名:{app}{#MyAppExeName};任务:桌面图标
[运行]
文件名:“{app}\{MyAppExeName}”说明:{cm:LaunchProgram,{{StringChange(MyAppName,&',&',&&')}}”标志:nowait postinstall skipifsilent
文件名:“schtasks.exe”\
参数:“/Create/TN MyTask/XML”“{tmp}\Task.XML”“\
StatusMsg:“计划任务…”安装前:CreateTaskXml
;旗帜:隐藏;
[守则]
创建TaskXML的过程;
变量
TaskXml:string;
开始
TaskXml:=
'' + #13#10 +
''
+ #13#10 +
'  ' + #13#10 +
{此处的EventTrigger}
'    ' +
“真的”+
“*[System[Provider[@Name='Microsoft-Windows-NetworkProfile']和EventID=10000]]+
'    ' +
'  ' + #13#10 +
{ ... }
'  ' + #13#10 +
'    ' + #13#10 +
''+ExpandConstant('{app}\{MyAppExeName}')+''++13#10+
'    ' + #13#10 +
'  ' + #13#10 +
'' + #13#10;
如果是SaveStringToFile(ExpandConstant({tmp}\Task.xml'),TaskXml,False),则
开始
日志(“任务XML已成功创建”);
结束
其他的
开始
日志('未能创建任务XML');
结束;
结束;

您能帮助我吗?谢谢。

与任何其他模糊的调度设置一样,您必须使用任务的XML定义

最简单的方法是在Windows任务调度器GUI中配置任务,选择创建的任务并选择导出命令

它将创建任务的XML定义,其中包含以下内容:


真的
QueryListQuery Id=“0”Path=“Microsoft Windows NetworkProfile/Operational”Select Path=“Microsoft Windows NetworkProfile/Operational”*[System[Provider[@Name='NetworkProfile']和EventID=10000]]/Select/Query/QueryList
编辑XML以删除所有特定于计算机的内容

然后将导出的XML用作文件的模板,您将在安装程序中动态创建该文件,并提供到已安装应用程序的实际路径:

[运行]
文件名:“schtasks.exe”\
参数:“/Create/TN MyTask/XML”“{tmp}\Task.XML”“\
StatusMsg:“调度任务…”标志:runhidden;BeforeInstall:CreateTaskXml
[守则]
创建TaskXML的过程;
变量
TaskXml:string;
开始
TaskXml:=
'' + #13#10 +
''
+ #13#10 +
'  ' + #13#10 +
{此处的EventTrigger}
'  ' + #13#10 +
{ ... }

'在
CreateTaskXml
中以Ansi编码创建XML。如果需要Unicode,则必须以UTF-16编码创建XML(
schtasks
不支持UTF-8).

当我导出XML时,没有
,有
查询列表
,这可以从我的回答中看出。我不知道我可以在这里问这个问题:我想在卸载期间删除创建的任务。它会显示一个确认窗口(Y/N)。是否可以通过“Y”跳过它答复?什么确认窗口?不管怎样,您是否尝试过
/F
?请参阅
schtasks/delete/?
。如果您还有其他问题,请分别发布。
#define MyAppName "Desktop"
#define MyAppVersion "2"
#define MyAppPublisher "MH"
#define MyAppExeName "Desktop.exe"

[Setup]
AppId={{EFBBA2D3-C6F0-4D3D-BBD5-5AF126C3E8E9}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup 2
Compression=lzma
SolidCompression=yes

PrivilegesRequired=admin

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "E:\IdeaProjects\Desktop\Desktop.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent 

Filename: "schtasks.exe"; \
    Parameters: "/Create /TN MyTask /XML ""{tmp}\Task.xml"""; \
    StatusMsg: "Scheduling task..."; BeforeInstall: CreateTaskXml 
    ;Flags: runhidden;

[Code]
procedure CreateTaskXml;
var
  TaskXml: string;
begin
  TaskXml :=
    '<?xml version="1.0"?>' + #13#10 +
    '<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">'
      + #13#10 +
    '  <Triggers>' + #13#10 +
    { The EventTrigger here }
    '    <EventTrigger>' +
    '      <Enabled>true</Enabled>' +
    '      <Subscription><QueryList><Query Id="0" Path="Microsoft-Windows-NetworkProfile/Operational"><Select Path="Microsoft-Windows-NetworkProfile/Operational">*[System[Provider[@Name='Microsoft-Windows-NetworkProfile'] and EventID=10000]]</Select></Query></QueryList></Subscription>' +
    '    </EventTrigger>' +
    '  </Triggers>' + #13#10 +
    { ... }
    '  <Actions Context="Author">' + #13#10 +
    '    <Exec>' + #13#10 +
    '      <Command>' + ExpandConstant('{app}\{#MyAppExeName}') + '</Command>' + #13#10 +
    '    </Exec>' + #13#10 +
    '  </Actions>' + #13#10 +
    '</Task>' + #13#10;

  if SaveStringToFile(ExpandConstant('{tmp}\Task.xml'), TaskXml, False) then
  begin
    Log('Task XML successfully created');
  end
    else
  begin
    Log('Failed to create task XML');
  end;
end;