我有一个本机 dll 形式的第 3 方 API,我使用 C# 调用它DllImport
。此本机 dll 依赖于打开的第 3 方应用程序。
当我正常运行代码时,API 会执行预期的操作并驱动应用程序。然而,当我运行与 Windows 服务相同的代码时,即使是我自己,API也会返回与我在关闭应用程序时看到的相同的(未记录的)错误代码;进程资源管理器确认本机 dll 已从应用程序目录正确加载。
可能是什么原因造成的?我该如何解决该问题?
有点旧,但它成为搜索中最热门的结果之一。所以我认为我的数据仍然会有帮助。
我有一个本机 dll 形式的第 3 方 API,我使用 DllImport 从 C# 调用它。此本机 dll 依赖于打开的第 3 方应用程序。
(t)rusty Office Interop DLL 也是如此。您实际上正在启动相关 Office 程序的后台实例。
后台实例需要一个交互式会话,即使它不显示任何内容(工作中的设计假设/错误)。
服务不运行在自 Vista 以来的交互式会话 https://msdn.microsoft.com/en-us/library/windows/desktop/ms683502%28v=vs.85%29.aspx。不建议使用替代做法。
这是不再使用 Office Interop 的 (3?) 原因之一。
可能的解决方法:
- 停止使用某项服务。 Windows 任务调度程序可以完成相同的工作,同时为您提供完整的交互式会话。甚至 MS 自己也开始尽可能将内容从服务中转移到调度程序中
- 将 DLL 访问移至辅助进程中。该程序可以在交互式会话中运行。使用任何进程间通信方式在帮助程序和主服务之间进行通信。此模式主要用于处理 x64 程序中的仅 x32 DLL,但它也应该在这里工作。清单和 Process.Start() 都有一种从服务交互启动程序的方法。
根据其中一条评论,您似乎选择了选项 2,但使用了 Web 服务。
不幸的是,Web 服务/Web 应用程序通常作为 Windows 服务运行。那是在您考虑它们在一些最严格的权利下运行之前(因为它们是可通过网络访问的)。
所以它只会让你回到方格 1,甚至又退一步回到方格 0。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)