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}."

感谢安德斯的帮助。