各位大人,
   环境:windows 2000, vs2003 ,C#
   有一个问题:如果要在windows Service 里面访问执行网络路径的某个exe文件,而且这个exe文件要有前端显示界面,就是windows service 要与桌面交互,应该如何是好?
   我的调查是 如果要访问网络路径,就不能使用windows 服务里面的localsystem 帐号,应该在服务里面指定用户名和密码。但是如果要windows 服务与桌面交互,就必须用localsystem帐号登陆服务并选择与桌面交互这个选项 ,用指定用户是没有这个选项的。
   
   我的调查未必准确,请高手指教,有兴趣者一起研究。
   
   
  

解决方案 »

  1.   

    windows service 自己不能和桌面互交,这是肯定的,还有就是因该应用程序(不管它在哪)通过接口访问服务。否则,你做的是什么?建议整理一下设计思路先
      

  2.   

    服务好象处理对话窗体上不行吧。
    使用windows service一般处理的是后台的,我写了一个服务程序,主要是因为系统不稳定,总是重新启动。如果不登录,自己的程序就无法运行,所以就写成服务了。
      

  3.   

    大致方法如下:
    1、windows 服务里面的还是使用localsystem 帐号;
    2、为了能访问网络路径,最好给服务增加参数,即用户名和密码,那么执行网络程序的话,用网络用户名和密码先连接,再调用执行。
      

  4.   

    回楼上几位:假设我要用windows service调用网络路径里面的notepad.exe用来打开某个txt文件, 很明显这个notepad程序是有前端显示的.
       如果写windows service ,一般来说是没有前端交互的,当运行这个服务的时候,只能在进程管理里面看到有这个notepad的进程,证明windows 服务执行了这个notepad.
       如果我这个时候鼠标右键服务属性点击里面的登陆,在本地帐号下钩选"允许服务与桌面交互",再重新运行这个服务,就可以在前端看到这个notepad了.证明windows 调用的程序可以与桌面交互.   但是问题就出现了,因为如果用本地帐号(localsystem)作为服务登陆,但是这个本地帐号没有权限访问网络路径底下的文件,我必须指定用户和密码才能访问网络路径的文件,但是指定了用户名密码,就不能用钩选"允许服务与桌面交互",即不能在前端看到notepad了.
       
       回愚翁的: 1,用了localsystem帐号就不能指定用户名和密码,你第2点说在服务里面增加参数,我在代码也是这样做的,指定了一个用户 和密码,就是服务的登陆将是你指定的用户和密码,那么如何还能使用localsystem帐号呢,两者只能有其一阿.  
      

  5.   

    connection share directory with specific username and passwordclass Sample_ConnectionOptions
    {
        public static int Main(string[] args) {
            ConnectionOptions options = new ConnectionOptions();
            options.Username = UserName; //could be in domain\user format
            options.Password = SecurelyStoredPassword;
            ManagementScope scope = new ManagementScope(
                "\\\\servername\\root\\cimv2",
                options);
            try {
                scope.Connect();
                ManagementObject disk = new ManagementObject(
                    scope,
                    new ManagementPath("Win32_logicaldisk='c:'"),
                    null);
                disk.Get();
            }
            catch (Exception e) {
                Console.WriteLine("Failed to connect: " + e.Message);
            }
            return 0;
        }
    }