Inno setup 如何使用Inno Setup在网络连接/断开事件上添加计划任务
我想在程序安装中使用Inno Setup,我需要Inno Setup在Windows任务计划程序中创建一个任务,以便在每次internet连接时启动我的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
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;