0

我在 Stack Overflow 网站上搜索了与关闭 Outlook 相关的问题。有很多点击,但似乎没有一个描述我正在尝试做的事情。

我要解决的问题是如何自动和无人值守地备份 Outlook 数据库。在复制 .pst 文件之前,需要关闭 Outlook(如果它正在运行)。

我在 (www.howto-outlook.com/howto/closeoutlookscript.htm) 找到了我需要的 VBScript。但是当从 Windows 任务计划程序启动时,我无法让它运行。

我在 Windows 8 Sony 笔记本电脑上运行。

我的 VBScript 应该在备份 .pst 文件之前关闭 Outlook。代码存储在 CloseOutlookVerify.vbs 中。

以下是来自 CloseOutlookVerify.vbs 的违规代码:

Set colProcessList = objWMIService.ExecQuery _
   ("Select * from Win32_Process Where Name = 'Outlook.exe'")
For Each objProcess in colProcessList
   Set objOutlook = CreateObject("Outlook.Application")

' The above line fails with ERR = 70 - Permission denied

   objOutlook.Quit
   Closed = 1
Next
  • 如果我从 Windows 资源管理器中双击 .vbs 文件,此脚本可以正常工作。
  • 如果我从 DOS 命令提示符窗口运行它,它可以正常工作。
  • 通过 Windows 任务计划程序运行时,它失败并显示 err = 70。

那么,从命令提示符运行此脚本与通过任务调度程序运行此脚本有何不同?当由任务调度程序运行时,如何使其正常工作?

仅供参考 - 我以 C 和 Unix shell 语言为生,但这是我第一次在 Windows 环境中接触 VBS。

非常感谢您提供的任何专业知识。

4

1 回答 1

1

我认为这是因为 impersonationLevel 尚未设置。尝试这个:

      Set objWMIService = GetObject("winmgmts:" _
      & "{impersonationLevel=impersonate}!\\" & strSysName & "\root\cimv2")
      Set colProcessList = objWMIService.ExecQuery _
      ("Select * from Win32_Process Where Name = 'Outlook.exe'")
      For Each objProcess in colProcessList
        objProcess.Terminate()
      Next
于 2013-11-05T11:55:48.677 回答