2017-05-19 111 views
0
!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 $0 
    Push $1 
    Push $2 
    StrCpy $0 false 
    System::Call "ole32::CoCreateInstance(g'${GUIDTaskScheduler}',i0,i11,g '${GUIDITaskScheduler}',*i.r1)i.r2" 
    IntCmp $2 0 0 +4 
    System::Call '$1->7(w r0)i.r2' 
    IntCmp $2 0 0 +2 
    StrCpy $0 true 
    Pop $2 
    Pop $1 
    END: 
    Exch $0 
FunctionEnd 

${DeleteTask} "TaskName" $0 
Pop $0 

$ 0應該設置爲true或1,但它是錯誤的。該任務不是刪除。ITaskScheduler ::刪除失敗

我在這裏做錯了什麼?

+0

什麼是$ 2中的錯誤代碼? – Anders

+0

我相信如果發生錯誤,它應該設置爲0和1。我還很新。 –

+0

我已經設法通過使用枯燥的ol'schtasks cmdline來解決問題。但是,這將困擾着我,直到我發現了什麼是錯誤的時候纔會結束。 –

回答

0

我已經想通了。這讓我困擾不已,但我在重寫它之後已經弄清楚了。這是工作功能。

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 $0 
    Push $0 
    Push $1 
    Push $2 
    Push $3 
    StrCpy $3 false 
    System::Call `${OLE32}` 
    IntCmp $2 0 0 +5 
    System::Call "$1->7(w r0)i.r2" 
    IntCmp $2 0 0 +3 
    System::Call "$1->2()" 
    StrCpy $3 true 
    Pop $2 
    Pop $1 
    Pop $0 
    Exch $3 
FunctionEnd 

;= $0 Should return either true on success or false on failure. 
${DeleteTask} $0 "Task Name" 
StrCmpS $0 true 0 +2 
DetailPrint "${TASK} was successfully deleted." 
DetailPrint "Failed to remove the task ${TASK}." 

非常感謝Anders的幫助。

1

打印HRESULT錯誤可能會給你一個線索。

看起來您正在用StrCpy $0 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 $0 
    Push $1 
    Push $2 
    System::Call "ole32::CoCreateInstance(g'${GUIDTaskScheduler}',i0,i11,g '${GUIDITaskScheduler}',*i.r1)i.r2" 
    IntCmp $2 0 "" fail 
    System::Call '$1->7(w r0)i.r2' ; Delete($0) 
    System::Call '$1->2()' ; Release 
    fail: 
    StrCpy $0 $2 ; HRESULT 
    Pop $2 
    Pop $1 
    Exch $0 
FunctionEnd 

Section 
${DeleteTask} "TaskName" $0 
DetailPrint HRESULT=$0 
SectionEnd 
+0

沒有工作..'HRESULT = -21457464'。不完全是這個數字,但它是類似的,但開始於-2?我明白你的意思,卸下它,謝謝那個。我們是否需要在刪除任務之前結束任務或者是否存在強制參數? –

+0

您可能需要使用UAC升級。如果它正在運行,請嘗試停止該任務。你需要告訴我們確切的錯誤代碼! – Anders

+0

安德斯,我很抱歉浪費你的時間。如何像忘記需要管理權限這樣的簡單錯誤可能會導致數小時的調試失敗,這是非常糟糕的。 –