2012-02-25 16 views
3

私はC#ライブラリファイルを作成しました。これはローカルパス(例:c:\ test.txt)でファイルを見つけ、ftpサーバーにアップロードします。Windowsサービスから私のDLLを呼び出す方法は?

私はちょうどコンソールアプリケーションからDLLを呼び出したが、私はWindowsサービスとしてどのように実行できますか、それは継続的に実行されますか?

"test.txt"のようなファイルがあれば、c:\フォルダを監視するサービスとしてこのDLLを実行するとします。

ありがとうございました

答えて

5

DLLは、機能を使用するときに呼び出されます。クラス内にいくつかのクラスといくつかの関数を持つDLLプロジェクトがある場合は、単にadd the DLL as a referenceをサービスプロジェクトに追加し、適切な関数を呼び出します。

Windowsサービスの作成には、this libraryを使用します。その理由は、Visual Studioテンプレートを使用してWindowsサービスを構築すると、実際にはビルドされていないからです。結果として生じるビルドはインストールされる必要があるWindowsサービスであり、次にstarted using the Services Snap-Inです。しかし、HoytsoftのカスタムWindowsサービスライブラリを使用すると、サービスは自動的にインストールされ、通常のWindowsフォームアプリケーションと同様に自動的に起動します。

サービスが起動時に確実に実行されるように、ServiceクラスをAutoStartに設定してください(CodeProjectの記事を参照)。サービスが継続的に実行されるように、プロセスが終了した場合でも、Restart Serviceフラグを即時再起動に設定する便利なレジストリハックを追加できます。

このレジストリハック== enter image description here

レジストリハック:

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\<YOUR_SERVICE_NAME_HERE>", true); 
key.SetValue("FailureActions", new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, Microsoft.Win32.RegistryValueKind.Binary); 
key.Close(); 

任意の管理ユーザーがまだ単にあなたのサービスを無効にすることで、あなたのプロセスを殺すことができることを理解します。

+0

これは素晴らしいJasonですが、私のテスト環境で実行されるHoytSoft.dllが64ビットであるかどうかはわかりません。 – Usher

+0

ええと、具体的なエラーがありますか? – Jason

+0

デプロイする前に私のテスト環境でまだテストしていないが、64ビットもサポートしていることを確認したい。 – Usher

0

FileSystemWatcherクラスをチェックして、ディレクトリ/ファイルの変更を監視します。

+1

助けてくれてありがとうが、誤解を招くかもしれない。私はジェイソンの答えを得た。 – Usher

+0

あなたの目標はディレクトリを監視することだったようです。それがFileSystemWatcherクラスの機能です。 –

+0

いいえ、私は例を与えられました、私は自分のデータベース(トリガーを以前使用)を監視すると思っていたが、私のシナリオでは動作しないので、私はその部分を行うためにWindowsサービスに変更した。 – Usher