2017-05-19 16 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 sollte auf wahr oder 1 gesetzt werden, aber es ist falsch. Die Aufgabe löscht nicht.ITaskScheduler :: Löschen schlägt fehl

Was mache ich hier falsch?

+0

Und was ist der Fehlercode in $ 2? – Anders

+0

Ich glaube, es sollte auf 0 und 1 gesetzt werden, wenn ein Fehler ausgelöst wird. Ich bin noch ziemlich neu. –

+0

Ich habe es geschafft, das Problem zu beheben, indem Sie langweilig schtasks Cmdline verwenden. Allerdings stört mich das zu keinem Ende, bis ich herausgefunden habe, was los ist. –

Antwort

0

Ich habe es herausgefunden. Dies störte mich bis zum Ende, aber ich habe es geschafft, es nach dem Umschreiben herauszufinden. Hier ist die Arbeitsfunktion.

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

Dank geht an Anders für seine Hilfe.

1

Das Ausdrucken des HRESULT-Fehlers würde Ihnen wahrscheinlich einen Hinweis geben.

Es sieht so aus, als ob Sie den Dienstnamen mit StrCpy $0 false überschreiben!

Sie sollten auch die Schnittstelle in $ 1 freigeben, nachdem Sie damit fertig sind.

!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

Hat nicht funktioniert .. 'HRESULT = -21457464'. nicht genau diese Nummer, aber es war ähnlich, aber beginnen Sie mit -2 ???? Ich verstehe deinen Standpunkt, es zu entladen, also danke für diesen. Müssen wir eine Aufgabe beenden, bevor wir sie entfernen, oder gibt es einen Force-Parameter? –

+0

Sie müssen wahrscheinlich mit UAC erhöhen. Versuchen Sie, die Aufgabe zu beenden, wenn sie ausgeführt wird. Sie müssen uns den genauen Fehlercode mitteilen! – Anders

+0

Anders, ich entschuldige mich dafür, dass Sie Ihre Zeit verschwendet haben. Es ist schrecklich, wie ein einfacher Fehler wie das Vergessen, administrative Privilegien zu verlangen, einen Abend mit stundenlangem Debugging ruinieren kann. –