0

编辑:

好的,到目前为止,通过无数的帖子,我已经找到了一个解决方案,我无法从服务中做我需要做的事情,我希望它成为一项服务,以便它始终在计算机上运行,但显然,通过编写服务的方式,我可能无法运行我想运行的命令,因为“该服务没有在与用户桌面相同的空间中运行”,因此它至少无法捕获桌面,这就是我到目前为止收集的内容。

至于现在,我将把它留在这里,也许会找到一种方法,在用户登录时以用户名启动程序,以捕获桌面,而不是尝试直接从服务中执行。

我已经在墙上敲了几个小时试图弄清楚这一点,我以前从未做过服务,只是形成应用程序,我的下一个项目(客户端服务器模型客户端监控实用程序)需要安装作为客户端机器上的服务并将数据发送回主服务器。

在我查找如何编写服务以及如何安装服务之前从未编写过服务。我让它一切正常,当前的工作版本每 30 秒吐出一个事件日志以显示它的工作。

我首先在 LocalSystem 中运行它,因为我认为它具有写入文件的权限,但是在那之后我尝试了 LocalService,但它也不起作用。

我将目录指定为 C:\WatcherData\Test.jpg

并在常规表单应用程序中对其进行了测试(有效)

OutputImage.Save("c:\watcherdata\test.jpg", ImageFormat.Jpeg);

没有例外,没有事件,它只是没有发生,但是 EventLog 消息被放在它之前,所以它应该到达那个点,对吧?

任何帮助将不胜感激,如果您需要了解其他任何信息,我将很乐意提供帮助

编辑:这里有一些代码:

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

在玩了一些之后,我设法让它写入文件,在意识到大部分问题是我缺乏关于如何构建服务和安装程序的知识之后,显然我在构建我的服务时没有重建安装程序。

现在它只写全黑,一个大的黑色图片。但至少它的写作!

4

1 回答 1

2

一些源代码怎么样?

我可能会添加一些跟踪以确保执行文件写入代码。

大多数情况下,这种类型的故障是权限问题和/或人们试图写入 Windows 系统目录。您的问题表明您正在确保您没有写入 Windows 目录。请确保 c:\watcherdata 文件夹存在。

于 2013-02-09T00:42:29.960 回答