smooth 发表于 2015-3-10 10:41:01

同样注册为服务后启动,为什么删除文件的exe不起作用?

本帖最后由 smooth 于 2015-3-11 18:43 编辑

情况是这样的,我写了一个监视打印服务的exe,内容如下:

While 1
    If _ServGetState("Spooler") = "Stopped" Then
      _Service_Start("Spooler")
    EndIf
WEnd

把这个exe注册成服务后启动,打印服务spooler就无法停止了。
但是我用同样的方法写了一个自动清空回收站的exe,内容如下:

#NoTrayIcon
While 1
    $recycle = _WinAPI_ShellQueryRecycleBin("")
    If $recycle > 0 Then
          FileRecycleEmpty()
    EndIf
WEnd

Func _WinAPI_ShellQueryRecycleBin($sRoot = '')
    Local $tSHQRBI = DllStructCreate('align 4;dword_ptr;int64;int64')
    DllStructSetData($tSHQRBI, 1, DllStructGetSize($tSHQRBI))
    Local $Ret = DllCall('shell32.dll', 'long', 'SHQueryRecycleBinW', 'wstr', $sRoot, 'struct*', $tSHQRBI)
    If @error Then Return SetError(@error, @extended, 0)
    If $Ret Then Return SetError(10, $Ret, 0)
    Local $Result
    $Result = DllStructGetData($tSHQRBI, 2)
    $Result = DllStructGetData($tSHQRBI, 3)
    Return $Result
EndFunc   ;==>_WinAPI_ShellQueryRecycleBin

用同样的方法把这个EXE注册成系统服务启动后,却不能自动清空回收站,双击这个exe是可以的。按照道理,注册成服务启动后,这个脚本就一直在循环了。

为什么会有这样的差异呢?分析了很久都找不到原因。如下图,两个服务对应的EXE文件都已在运行。谢谢!


把这个EXE加入开机自动启动,可以自动清空回收站。
页: [1]
查看完整版本: 同样注册为服务后启动,为什么删除文件的exe不起作用?