winform的程序调用com对象完全正常,windows服务里却不行,这里面有啥说道?

wb4u 2009-10-21 12:53:14
如题
...全文
174 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
足球中国 2009-10-21
  • 打赏
  • 举报
回复
哪些环境引起的吧。断点分析应该很容易找到问题。
threenewbee 2009-10-21
  • 打赏
  • 举报
回复
(1)COM的多线程模式(单元、单线程……)
(2)是否使用用户界面,使用消息循环
(3)权限问题
(4)是否需要调用同一个系统会话

可以让程序输出日志来查看问题。
Dobzhansky 2009-10-21
  • 打赏
  • 举报
回复
执行进程的os帐户(?)不同, 因此权限, 环境变量之类的也就不同
服务不行, 是找不到什么文件, 还是不具备某些权限呢.
wb4u 2009-10-21
  • 打赏
  • 举报
回复
苍天呀,大地呀,XP没问题,看来是还是win2003机制或者权限的问题
Dobzhansky 2009-10-21
  • 打赏
  • 举报
回复
Window Stations

A window station contains a clipboard, an atom table, and one or more desktop objects. Each window station object is a securable object. When a window station is created, it is associated with the calling process and assigned to the current session.

The interactive window station, Winsta0, is the only window station that can display a user interface or receive user input. It is assigned to the logon session of the interactive user, and contains the keyboard, mouse, and display device. All other window stations are noninteractive, which means they cannot display a user interface or receive user input.

When a user logs on to a Terminal Services-enabled computer, a session is started for the user. Each session is associated with its own interactive window station. For more information, see Terminal Services Sessions.
wb4u 2009-10-21
  • 打赏
  • 举报
回复
window station是什么东西?我百度了下,沙盒?
Dobzhansky 2009-10-21
  • 打赏
  • 举报
回复
是不是你的程序需要 window station?
wb4u 2009-10-21
  • 打赏
  • 举报
回复
本地系统账户、此账户加密码都试了下,依然如故,哎,换个XP试试
Dobzhansky 2009-10-21
  • 打赏
  • 举报
回复
这个是头次安装服务时的配置,
安装后在
计算机管理 - 服务 里头还可以修改服务的帐户. 你看看服务的属性对话框里头
wb4u 2009-10-21
  • 打赏
  • 举报
回复
是修改serviceProcessInstaller1里的account属性吗?

有4个属性,LocalService,NetworkService,LocalSystem,User,我现在是LocalSystem

还有操作系统是win2003,当前用户是administrator
threenewbee 2009-10-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wb4u 的回复:]
C#调用的OPC组件Dll,是第三方提供的

我测试了两家的提供的dll

一个报错:检索 COM 类工厂中 CLSID 为 {6E6170F0-FF2D-11D2-8087-00105AA8F840} 的组件时失败,原因是出现以下错误: 8000401a

另一个报错:E_NETWORK_ERROR Could not connect to server.

而同样代码在winform里是完全正常的
[/Quote]
OPC一般可能是用消息通讯的,所以不能工作。
宝_爸 2009-10-21
  • 打赏
  • 举报
回复
试一试使用登录账户运行服务。
在服务的属性里可以设置。
Dobzhansky 2009-10-21
  • 打赏
  • 举报
回复
你试试将服务的帐户修改为管理员帐户, 看问题消失不,
如果可以, 应该是权限方面的问题, com interop 在 .net 2.0 变态了许多,

或者你用 1.1 的 CLR 试试
wb4u 2009-10-21
  • 打赏
  • 举报
回复
C#调用的OPC组件Dll,是第三方提供的

我测试了两家的提供的dll

一个报错:检索 COM 类工厂中 CLSID 为 {6E6170F0-FF2D-11D2-8087-00105AA8F840} 的组件时失败,原因是出现以下错误: 8000401a

另一个报错:E_NETWORK_ERROR Could not connect to server.

而同样代码在winform里是完全正常的

17,741

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧