1

Windowsサービスのサンプルコード

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();               
           }

WindowsフォームからdeleteFile(文字列フォルダ)を呼び出すにはどうすればよいですか?

4

1 に答える 1

0

OnCustomCommandオーバーライドを使用できますが、これは引数として整数のみを取り、サービスへの文字列の受け渡しをサポートしていません。

他のオプションは、WCFサービスを作成するか、リモーティングを使用して必要な情報をサービスに渡し、deleteメソッドを呼び出すことです。

編集:非常に奇妙な方法で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);
}

これはテストされておらず、概念実証にすぎません。繰り返しになりますが、この方法はお勧めしません。上記の例は、デスクトップアプリケーションとサービス間でこの種の通信を行わない方法を示すためだけのものです。

于 2012-10-24T16:47:19.207 に答える