VBS Application.Outlook 并发使用
VBS Application.Outlook concurrent usage
我们用 VBScript 编写的自动化脚本广泛使用了模式
Set objOutl = CreateObject("Outlook.Application")
Set objMailItem = objOutl.CreateItem(0)
With objMailItem
.Display
.Recipients.Add("to@example.com")
.Subject = "..."
.Body = "..."
.SaveAs fileName, 2
.Close 1
End With
objMailItem = Nothing
objOutl = Nothing
从并发 运行 脚本(在同一用户帐户下)使用这个模式是否安全,或者需要围绕它实施一些锁定?假设它是 Windows 10,并且是最新的 Outlook 版本。
Outlook 使用 STA 模型,因此您的调用将由调度程序编组到主线程。那里没有什么可疑的,但我建议创建任何调度机制,因为目标应用程序将无法同时处理您的呼叫。
请注意,Microsoft 目前不推荐也不支持来自任何无人值守的 non-interactive 客户端应用程序或组件(包括 ASP、ASP.NET 的 Microsoft Office 应用程序自动化、DCOM 和 NT 服务),因为当 Office 在此环境中 运行 时,Office 可能表现出不稳定的行为 and/or 死锁。
如果您要在 server-side 上下文中构建 运行 的解决方案,您应该尝试使用已确保无人值守执行安全的组件。或者,您应该尝试找到至少允许部分代码为 运行 client-side 的替代方案。如果您使用来自 server-side 解决方案的 Office 应用程序,该应用程序将缺少许多 运行 成功所必需的功能。此外,您将承担整体解决方案稳定性的风险。
在 Considerations for server-side Automation of Office 文章中阅读更多相关信息。
我们用 VBScript 编写的自动化脚本广泛使用了模式
Set objOutl = CreateObject("Outlook.Application")
Set objMailItem = objOutl.CreateItem(0)
With objMailItem
.Display
.Recipients.Add("to@example.com")
.Subject = "..."
.Body = "..."
.SaveAs fileName, 2
.Close 1
End With
objMailItem = Nothing
objOutl = Nothing
从并发 运行 脚本(在同一用户帐户下)使用这个模式是否安全,或者需要围绕它实施一些锁定?假设它是 Windows 10,并且是最新的 Outlook 版本。
Outlook 使用 STA 模型,因此您的调用将由调度程序编组到主线程。那里没有什么可疑的,但我建议创建任何调度机制,因为目标应用程序将无法同时处理您的呼叫。
请注意,Microsoft 目前不推荐也不支持来自任何无人值守的 non-interactive 客户端应用程序或组件(包括 ASP、ASP.NET 的 Microsoft Office 应用程序自动化、DCOM 和 NT 服务),因为当 Office 在此环境中 运行 时,Office 可能表现出不稳定的行为 and/or 死锁。
如果您要在 server-side 上下文中构建 运行 的解决方案,您应该尝试使用已确保无人值守执行安全的组件。或者,您应该尝试找到至少允许部分代码为 运行 client-side 的替代方案。如果您使用来自 server-side 解决方案的 Office 应用程序,该应用程序将缺少许多 运行 成功所必需的功能。此外,您将承担整体解决方案稳定性的风险。
在 Considerations for server-side Automation of Office 文章中阅读更多相关信息。