这里的代码是
protected override void OnStart(string[] args)
{
Thread thr = new Thread(new ThreadStart(run));
thr.Start();
}
static void run()
{
while (true)
{
StreamWriter str = new StreamWriter("D:\\Sarojini.txt", true);
str.WriteLine();
str.WriteLine("**** List of Apllication*********");
str.WriteLine();
str.WriteLine("Service started on:" + DateTime.Now.ToString());
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
str.WriteLine();
str.WriteLine("the current user is " + userName);
Process[] processlist = Process.GetProcesses();
foreach (Process process in processlist)
{
if (!String.IsNullOrEmpty(process.MainWindowTitle))
{
str.WriteLine("Process::{0} ID::{1} Title::{2}", process.ProcessName, process.Id, process.MainWindowTitle);
}
}
str.Close();
Thread.Sleep(3600000 / 10);
}
}
protected override void OnStop()
{
StreamWriter str = new StreamWriter("D:\\Sarojini.txt", true);
str.WriteLine();
str.WriteLine("the service has been stopped.");
}
这里在这段代码中,创建了一个文本文件并在其上写了第一行,但是正在运行的应用程序列表不在那里,当我在windowsFormApllication中使用此代码时,它运行得很好。我不知道是什么问题。
答案 0 :(得分:1)
这很可能是由于您运行服务的帐户没有使用Process
类的正确权限。在尝试检索您的应用程序需要具有足够权限的进程名称,ID等时,默认本地系统帐户不太可能满足此要求。
当您将此代码作为Windows窗体应用程序WindowsIdentity.GetCurrent()
运行时,将返回当前登录的用户。
当您将此代码作为Windows服务运行时WindowsIdentity.GetCurrent()
将返回在服务设置中的用户帐户下设置的用户。
这将显示它们使用不同的凭据运行。因此,您的服务可能在无权执行所需操作的帐户下运行。
要检查一下:
进入服务,然后双击您的服务。
点击登录标签
默认选中本地系统帐户,但您要选择此帐户并设置有效帐户。