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.Account = System.ServiceProcess.ServiceAccount.User;
            this.spInstaller.Password = "pwd";
            this.spInstaller.Username = @"机器名\登陆名";

然后将服务卸载以后,重新注册,一切正常!
后面又发现其实上面的代码无须更改,可以在服务注册成功之后,在管理的服务中找到注册的服务,然后右键属性-登陆,把其中的账户修改为你的登陆账户,然后启动服务,同样也可以访问.
                                    


  

 

你可能感兴趣的:(window)