2013-02-09 19 views
0

編輯:C#的服務將不寫入文件,沒有錯誤

好,截至目前,通過我這一點,我已經到了一個解決方案無數的帖子看,我不能做什麼,我需要從服務做的,我希望它成爲一種服務,以便它始終可用於計算機,但顯然隨着服務的編寫方式的不同,我可能無法運行我想運行的命令,因爲「該服務不在相同的空間中運行作爲用戶桌面「,所以它不會能夠捕獲桌面,至少,這就是即時收集到目前爲止。

至於現在,我會在這裏留下來,也許可以找到一種方法,在用戶名登錄時啓動一個程序來捕獲桌面,而不是直接從服務中嘗試。

我一直在牆上砸我的頭幾個小時,現在試圖弄清楚這一點,我從來沒有提供過服務,只是形成應用程序,以及我的下一個項目(客戶端服務器模型客戶端監控實用程序)需要作爲服務安裝在客戶機上並將數據發送回主服務器。

從未寫過服務,然後再查閱如何編寫一個以及如何安裝它以及如何安裝它。我把它一切工作正常,目前的工作版本每隔30秒吐出一次事件註銷以顯示其工作。

我開始在LocalSystem中運行它,因爲我認爲它具有寫入文件的權限,但在嘗試失敗之後,我嘗試了LocalService,但這也不起作用。

林指定目錄爲C:\ watcherdata \ test.jpg放在:\ WatcherData \ test.jpg放在

和以規則的形式應用(工作)

OutputImage.Save(「C測試它「,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); 
     } 
    } 

大部分是從拍攝微軟示例文檔,就像我說的,我是新來的服務

目前仍在試圖搞清楚,就會讓你們知道,如果我得到任何地方

編輯2

在玩了一些之後,我設法讓它寫入文件,在意識到大部分問題出在我缺乏關於如何構建服務和安裝程序的知識之後,顯然我並沒有重建當我建立我的服務安裝程序。

現在它只是寫入所有黑色,一個大的黑色圖片。但至少它的寫作!

+1

一些代碼可能會幫助你得到答案。因爲,我們沒有太多的事情要繼續下去。 – vossad01 2013-02-09 00:40:49

+0

您是否嘗試在try/catch中包裝outputimage,並將異常寫入catch中的事件日誌? – AaronLS 2013-02-09 00:44:35

+0

是的,我嘗試過(不得不輸入幾個字符來說yes> _>) – RyanTimmons91 2013-02-09 00:53:41

回答

2

一些源代碼如何?

我可能會添加一些跟蹤來確保執行文件寫入代碼。

大多數情況下,這種類型的失敗是一個權限問題和/或人們試圖寫入Windows系統目錄。你的問題表明你確保你不寫入Windows目錄。請確保c:\ watcherdata文件夾存在。

+0

以及我想我可以給一些來源:P它總是很難告訴人們當你知道上下文時需要的上下文。 – RyanTimmons91 2013-02-09 00:43:38

+0

幾乎總是一個(文件系統)權限問題。檢查服務運行的是哪個用戶,並明確地訪問該文件夾。 – 2013-02-09 00:45:50

+0

您可以使用sys內部進程監視器(谷歌,免費下載)來查找文件訪問錯誤。良好的文件訪問問題調試工具。 – AaronLS 2013-02-09 00:48:31