各位大人,
环境:windows 2000, vs2003 ,C#
有一个问题:如果要在windows Service 里面访问执行网络路径的某个exe文件,而且这个exe文件要有前端显示界面,就是windows service 要与桌面交互,应该如何是好?
我的调查是 如果要访问网络路径,就不能使用windows 服务里面的localsystem 帐号,应该在服务里面指定用户名和密码。但是如果要windows 服务与桌面交互,就必须用localsystem帐号登陆服务并选择与桌面交互这个选项 ,用指定用户是没有这个选项的。
我的调查未必准确,请高手指教,有兴趣者一起研究。
环境:windows 2000, vs2003 ,C#
有一个问题:如果要在windows Service 里面访问执行网络路径的某个exe文件,而且这个exe文件要有前端显示界面,就是windows service 要与桌面交互,应该如何是好?
我的调查是 如果要访问网络路径,就不能使用windows 服务里面的localsystem 帐号,应该在服务里面指定用户名和密码。但是如果要windows 服务与桌面交互,就必须用localsystem帐号登陆服务并选择与桌面交互这个选项 ,用指定用户是没有这个选项的。
我的调查未必准确,请高手指教,有兴趣者一起研究。
使用windows service一般处理的是后台的,我写了一个服务程序,主要是因为系统不稳定,总是重新启动。如果不登录,自己的程序就无法运行,所以就写成服务了。
1、windows 服务里面的还是使用localsystem 帐号;
2、为了能访问网络路径,最好给服务增加参数,即用户名和密码,那么执行网络程序的话,用网络用户名和密码先连接,再调用执行。
如果写windows service ,一般来说是没有前端交互的,当运行这个服务的时候,只能在进程管理里面看到有这个notepad的进程,证明windows 服务执行了这个notepad.
如果我这个时候鼠标右键服务属性点击里面的登陆,在本地帐号下钩选"允许服务与桌面交互",再重新运行这个服务,就可以在前端看到这个notepad了.证明windows 调用的程序可以与桌面交互. 但是问题就出现了,因为如果用本地帐号(localsystem)作为服务登陆,但是这个本地帐号没有权限访问网络路径底下的文件,我必须指定用户和密码才能访问网络路径的文件,但是指定了用户名密码,就不能用钩选"允许服务与桌面交互",即不能在前端看到notepad了.
回愚翁的: 1,用了localsystem帐号就不能指定用户名和密码,你第2点说在服务里面增加参数,我在代码也是这样做的,指定了一个用户 和密码,就是服务的登陆将是你指定的用户和密码,那么如何还能使用localsystem帐号呢,两者只能有其一阿.
{
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;
}
}