ITaskScheduler::Delete 失败
ITaskScheduler::Delete fails
!define GUIDTaskScheduler "{148BD52A-A2AB-11CE-B11F-00AA00530503}"
!define GUIDITaskScheduler "{148BD527-A2AB-11CE-B11F-00AA00530503}"
Function DeleteTask
!define DeleteTask "!insertmacro _DeleteTask"
!macro _DeleteTask _TASK _RESULT
Push ${_Task}
Call DeleteTask
Pop ${_RESULT}
!macroend
Exch [=11=]
Push
Push
StrCpy [=11=] false
System::Call "ole32::CoCreateInstance(g'${GUIDTaskScheduler}',i0,i11,g '${GUIDITaskScheduler}',*i.r1)i.r2"
IntCmp 0 0 +4
System::Call '->7(w r0)i.r2'
IntCmp 0 0 +2
StrCpy [=11=] true
Pop
Pop
END:
Exch [=11=]
FunctionEnd
${DeleteTask} "TaskName" [=11=]
Pop [=11=]
$0 应该设置为 true 或 1 但它是 false。任务没有删除。
我在这里做错了什么?
打印出 HRESULT 错误可能会为您提供线索。
您似乎正在用 StrCpy [=11=] false
!
覆盖服务名称
你也应该在$1中用完后释放接口。
!define GUIDTaskScheduler "{148BD52A-A2AB-11CE-B11F-00AA00530503}"
!define GUIDITaskScheduler "{148BD527-A2AB-11CE-B11F-00AA00530503}"
Function DeleteTask
!define DeleteTask "!insertmacro _DeleteTask"
!macro _DeleteTask _TASK _RESULT
Push ${_Task}
Call DeleteTask
Pop ${_RESULT}
!macroend
Exch [=10=]
Push
Push
System::Call "ole32::CoCreateInstance(g'${GUIDTaskScheduler}',i0,i11,g '${GUIDITaskScheduler}',*i.r1)i.r2"
IntCmp 0 "" fail
System::Call '->7(w r0)i.r2' ; Delete([=10=])
System::Call '->2()' ; Release
fail:
StrCpy [=10=] ; HRESULT
Pop
Pop
Exch [=10=]
FunctionEnd
Section
${DeleteTask} "TaskName" [=10=]
DetailPrint HRESULT=[=10=]
SectionEnd
我已经弄明白了。这一直困扰着我,但我在重写后设法弄明白了。这是工作函数。
Function DeleteTask
!define TaskGUID `{148BD52A-A2AB-11CE-B11F-00AA00530503}`
!define ITaskGUID `{148BD527-A2AB-11CE-B11F-00AA00530503}`
!define OLE `ole32::CoCreateInstance(g"${TaskGUID}",`
!define OLE32 `${OLE}i0,i11,g "${ITaskGUID}",*i.r1)i.r2`
!define DeleteTask "!insertmacro _DeleteTask"
!macro _DeleteTask _RESULT _TASK
Push ${_Task}
Call DeleteTask
Pop ${_RESULT}
!macroend
Exch [=10=]
Push [=10=]
Push
Push
Push
StrCpy false
System::Call `${OLE32}`
IntCmp 0 0 +5
System::Call "->7(w r0)i.r2"
IntCmp 0 0 +3
System::Call "->2()"
StrCpy true
Pop
Pop
Pop [=10=]
Exch
FunctionEnd
;= [=10=] Should return either true on success or false on failure.
${DeleteTask} [=10=] "Task Name"
StrCmpS [=10=] true 0 +2
DetailPrint "${TASK} was successfully deleted."
DetailPrint "Failed to remove the task ${TASK}."
感谢安德斯的帮助。
!define GUIDTaskScheduler "{148BD52A-A2AB-11CE-B11F-00AA00530503}"
!define GUIDITaskScheduler "{148BD527-A2AB-11CE-B11F-00AA00530503}"
Function DeleteTask
!define DeleteTask "!insertmacro _DeleteTask"
!macro _DeleteTask _TASK _RESULT
Push ${_Task}
Call DeleteTask
Pop ${_RESULT}
!macroend
Exch [=11=]
Push
Push
StrCpy [=11=] false
System::Call "ole32::CoCreateInstance(g'${GUIDTaskScheduler}',i0,i11,g '${GUIDITaskScheduler}',*i.r1)i.r2"
IntCmp 0 0 +4
System::Call '->7(w r0)i.r2'
IntCmp 0 0 +2
StrCpy [=11=] true
Pop
Pop
END:
Exch [=11=]
FunctionEnd
${DeleteTask} "TaskName" [=11=]
Pop [=11=]
$0 应该设置为 true 或 1 但它是 false。任务没有删除。
我在这里做错了什么?
打印出 HRESULT 错误可能会为您提供线索。
您似乎正在用 StrCpy [=11=] false
!
你也应该在$1中用完后释放接口。
!define GUIDTaskScheduler "{148BD52A-A2AB-11CE-B11F-00AA00530503}"
!define GUIDITaskScheduler "{148BD527-A2AB-11CE-B11F-00AA00530503}"
Function DeleteTask
!define DeleteTask "!insertmacro _DeleteTask"
!macro _DeleteTask _TASK _RESULT
Push ${_Task}
Call DeleteTask
Pop ${_RESULT}
!macroend
Exch [=10=]
Push
Push
System::Call "ole32::CoCreateInstance(g'${GUIDTaskScheduler}',i0,i11,g '${GUIDITaskScheduler}',*i.r1)i.r2"
IntCmp 0 "" fail
System::Call '->7(w r0)i.r2' ; Delete([=10=])
System::Call '->2()' ; Release
fail:
StrCpy [=10=] ; HRESULT
Pop
Pop
Exch [=10=]
FunctionEnd
Section
${DeleteTask} "TaskName" [=10=]
DetailPrint HRESULT=[=10=]
SectionEnd
我已经弄明白了。这一直困扰着我,但我在重写后设法弄明白了。这是工作函数。
Function DeleteTask
!define TaskGUID `{148BD52A-A2AB-11CE-B11F-00AA00530503}`
!define ITaskGUID `{148BD527-A2AB-11CE-B11F-00AA00530503}`
!define OLE `ole32::CoCreateInstance(g"${TaskGUID}",`
!define OLE32 `${OLE}i0,i11,g "${ITaskGUID}",*i.r1)i.r2`
!define DeleteTask "!insertmacro _DeleteTask"
!macro _DeleteTask _RESULT _TASK
Push ${_Task}
Call DeleteTask
Pop ${_RESULT}
!macroend
Exch [=10=]
Push [=10=]
Push
Push
Push
StrCpy false
System::Call `${OLE32}`
IntCmp 0 0 +5
System::Call "->7(w r0)i.r2"
IntCmp 0 0 +3
System::Call "->2()"
StrCpy true
Pop
Pop
Pop [=10=]
Exch
FunctionEnd
;= [=10=] Should return either true on success or false on failure.
${DeleteTask} [=10=] "Task Name"
StrCmpS [=10=] true 0 +2
DetailPrint "${TASK} was successfully deleted."
DetailPrint "Failed to remove the task ${TASK}."
感谢安德斯的帮助。