编辑:
好的,截至目前,通过无数的帖子,我已经找到了一个解决方案,我不能做我需要做的服务,我希望它是一个服务,所以它将始终是计算机,但显然与服务的编写方式,我可能无法运行我想运行的命令,因为“该服务不在与用户桌面相同的空间运行”,因此它将无法捕获桌面,至少,那就是我到目前为止收集的内容。
至于现在,我将把它留在这里,也许找到一种方法,在用户登录时以用户名启动程序,捕获桌面,而不是直接尝试从服务中执行。
我一直在墙上撞了几个小时,现在试图解决这个问题,我以前从未提供过服务,只是表单应用程序,以及我的下一个项目(Client Server Model Client Monitoring实用程序)需求在客户端计算机上作为服务安装并将数据发送回主服务器。
在我查找如何编写服务以及如何安装服务之前从未编写过服务。我完全正常工作,当前工作版本每30秒发出一次事件注册,以显示其工作情况。
我开始在LocalSystem中运行它,因为我认为它有权写入文件,但在那次失败之后我尝试了LocalService,这也没有用。
我将目录指定为C:\ WatcherData \ Test.jpg
并在常规表单应用程序(可行)中进行测试
OutputImage.Save(“c:\ watcherdata \ test.jpg”,ImageFormat.Jpeg);
没有例外,没有事件,它只是没有发生,但是事件日志消息被放在它之前,所以它应该到达那一点,对吗?
任何帮助都将受到赞赏,如果您需要了解其他任何我很乐意帮助
编辑: 这里有一些代码:
private void ServiceWorkerThread(object state)
{
while (!this.stopping)
{
this.eventLog1.WriteEntry("This is a test2");
CallMe();
Thread.Sleep(30000);
}
this.stoppedEvent.Set();
}
private void CallMe()
{
try
{
int screenWidth = Screen.GetBounds(new Point(0, 0)).Width;
int screenHeight = Screen.GetBounds(new Point(0, 0)).Height;
Bitmap OutputImage = new Bitmap(screenWidth, screenHeight);
Graphics gfx = Graphics.FromImage((Image) OutputImage);
gfx.CopyFromScreen(0, 0, 0, 0, new Size(screenWidth, screenHeight));
OutputImage.Save("c:\\watcherdata\\test.jpg", ImageFormat.Jpeg);
}
catch (Exception e)
{
this.eventLog1.WriteEntry(e.Message + "\r\n" + e.StackTrace, EventLogEntryType.Error);
}
}
大部分内容来自Microsoft示例文档,正如我所说,我是服务新手
目前仍在试图弄明白,如果我到处都会让你们知道
编辑2
在玩了一些之后我设法让它写入文件,在意识到大部分问题是由于我对如何构建服务和安装程序缺乏了解,显然当我构建我的时候我没有重建安装程序服务。
现在它只是写下所有黑色,一张大而黑的照片。但至少是它的写作!
答案 0 :(得分:2)
一些源代码怎么样?
我可能会添加一些跟踪以确保执行文件写入代码。
大多数情况下,此类故障是权限问题和/或人们正在尝试写入Windows系统目录。您的问题表明您确保不写入Windows目录。请确保存在c:\ watcherdata文件夹。