2012-10-24 104 views
1

窗口服務的示例代碼Windows服務文件中刪除C#

using System.Diagnostics; 
using System.ServiceProcess; 
using System.Text; 
using System.IO; 
namespace file_delete 
{ 
    public partial class file_delete : ServiceBase 
    { 
     public file_delete() 
     { 
      InitializeComponent(); 
     } 
     protected override void OnStart(string[] args) 
     {   
     } 
     private void deleteFile(string folder) 
     { 
     System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(folder); 
     System.IO.FileInfo[] fileNames = dirInfo.GetFiles("*.*"); 
      foreach (System.IO.FileInfo fi in fileNames) 
      {    
       fi.Delete();    
      } 

我如何可以調用DELETEFILE(字符串的文件夾)

+1

請參閱:http://www.codeproject.com/Articles/1111/How-To-Host-NET-Remoting-Objects-in-Windows-Servic 您想設置一個頻道,以便您的表單可以「談話「的服務。 .NET Remoting是最不可思議的,WCF +命名管道可能更好。 即使它看起來,你是沒有好。 –

+0

我我想要做的調用DELETEFILE(文件)方法 – mesuts

+0

@Phil。 (你應該張貼作爲回答您的評論) – tgolisch

回答

0

可以使用OnCustomCommand覆蓋,但這只是需要一個整數作爲參數,並且不支持字符串傳遞給服務。

其他選項將創建一個WCF service或使用Remoting將所需的信息傳遞給服務並調用刪除方法。

編輯:應對在有關如何在一個非常奇怪的方式使用OnCustomCommand的評論的問題如下。

在服務你需要這樣的事情。

private const int CMD_INIT_DELETE = 1; 
private const int CMD_RUN_DELETE = 0; 

private bool m_CommandInit = false; 
private StringBuilder m_CommandArg = new StringBuilder(); 

protected override void OnCustomCommand(int command) 
{ 
    if (command == CMD_INIT_DELETE) 
    { 
     this.m_CommandArg.Clear(); 
     this.m_CommandInit = true; 
    } 
    else if (this.m_CommandInit) 
    { 
     if (command == CMD_RUN_DELETE) 
     { 
      this.m_CommandInit = false; 
      this.deleteFile(this.m_CommandArg.ToString()); 
     } 
     else 
     { 
      this.m_CommandArg.Append((char)command); 
     } 
    } 
} 

在Windows窗體應用程序,你有這樣的事情

private const int CMD_INIT_DELETE = 1; 
private const int CMD_RUN_DELETE = 0; 

private void RunServiceDeleteMethod(string delFolder) 
{ 
    serviceController1.ExecuteCommand(CMD_INIT_DELETE); 

    foreach (char ch in delFolder) 
     serviceController1.ExecuteCommand((int)ch); 

    serviceController1.ExecuteCommand(CMD_RUN_DELETE); 
} 

這不是測試,只是一個概念證明。同樣,我不建議這樣做,上面的例子只是說明如何不在桌面應用程序和服務之間進行這種類型的通信。

+0

OnCustomCommand是128到256之間的數字。我的發送字符串 – mesuts

+0

它可以是任何整數......我想你可以,如果你真的想,做一系列的CustomCommand調用,首先發送命令作爲一個數字執行(比方說1 ),然後繼續爲文件名和路徑中的每個字符調用CustomCommand,後跟0,表示您已完成將該信息傳遞給服務。在服務端你可以存儲這些信息,一旦發送0,用你傳遞的文件名調用deleteFile。我不建議這樣做,因爲它很混亂,你爲什麼要那樣做。嘗試它可能很簡單,只是說你已經嘗試過了。 – vane

+0

另一種方式的示例代碼在那裏,如果是這樣, – mesuts