window serives(c#) 中访问网络资源
最近用c#写了一个window services,利用 installutil.exe注册成功以后,就开始测试了.
程序代码我就不列出来了,我的这个 window service 中利用水晶报表的 PrintToPrinter(),进行数据的打印,当然这里的打印机是网络打印机.服务一启动,发现打印机并没有正常的进行打印,查看日志
"指定的打印机无效。"!难道网络地址不对,或者是其他的代码出现问题,仔细检查以后,测试!问题依然存在.
于是将所有的打印代码,复制到一个winform程序中,运行....一切正常,打印机正常打印.
初次遇到这个问题,想想:难道服务中的不能找到映射出的网络,或者说没有权限访问网络资源!
打开任务管理器:
印象名称 用户名
winform(test) 系统登陆时候的用户名.
window service system
所以猜想问题就出在这里,对于网络资源,或者说网络服务器,只认识你的当前登陆的用户,而对于system则拒绝访问.
虽然本地来说system的权限很高,但是对于访问网络来说,则不相同.
于是想到一段代码:(install 类里面)
this.spInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
this.spInstaller.Password = null;
this.spInstaller.Username = null;
this.spInstaller.Password = null;
this.spInstaller.Username = null;
将上述代码改为:
this.spInstaller.Account = System.ServiceProcess.ServiceAccount.User;
this.spInstaller.Password = "pwd";
this.spInstaller.Username = @"机器名\登陆名";
this.spInstaller.Password = "pwd";
this.spInstaller.Username = @"机器名\登陆名";
然后将服务卸载以后,重新注册,一切正常!
后面又发现其实上面的代码无须更改,可以在服务注册成功之后,在管理的服务中找到注册的服务,然后右键属性-登陆,把其中的账户修改为你的登陆账户,然后启动服务,同样也可以访问.