2011-01-25 1 views
0

これは私にとって本当に奇妙なので、私はWindowsサービスを書くのが初めてです。 WinFormを使用して外部ライブラリをデバッグしました。外部ライブラリは、ドライブのマッピング、ディレクトリ構造のコピー、元のディレクトリの削除、コピーされたディレクトリの名前の変更、マッピングの削除を行います。Windowsサービスが外部ライブラリの関数を実行しない理由はありますか?

外部クラスを初期化してプロセスを開始するサービスを書くと、サービスは自分がやっているはずのことをしているようには見えません。何もしておらず、何が起こっているかを完全に無視しているようです。

は、私が行方不明です何かありますか?外部ライブラリにはセキュリティ属性が必要ですか?ウィルのコメント@ごとに、デバッガをアタッチする方法を発見

更新System.Diagnostics.Debugger.Break()

編集
あなたが正しいディレクトリにapp.configファイルをコピーする場合にも役立ちます!

答えて

2

ここではあまり意味がありません。まず、コードをテストするためにwinformフロントエンドを使用するのではなく、実行していなければならないサービスをデバッグすることができます。

問題は、サービスが正しく作成されていないか、セキュリティ上の問題があることです。

サービスは開始メッセージを受け取ります。その後、別のスレッドで独自のコードを実行する必要があります(タイマーはこれを行う一般的な方法です)。

サービスがドライブに触れている場合、実行されるユーザーアカウントには、操作を実行する権利が必要です。実行するユーザーアカウントを自分のアカウントに変更して、動作しているかどうか確認してください。

+0

私は自分のユーザーアカウントでサービスを実行しています。私は、問題ではないはずのドライブのコピー、コピー、名前の変更、削除などの権利を持っています。私は、サービスをデバッグする方法を見つける必要があると思います。それは大きな助けとなり、何が起こっているのかを把握するステップになります。 – IAbstract

+0

私は、デバッガを接続するメソッドを見つけました: 'System.Diagnostics.Debugger.Break()' – IAbstract

+1

@IAbstractはそのメソッドを見つけることをお祝いします。プリプロセッサディレクティブ[#if DEBUG](http://msdn.microsoft.com/en-us/library/4y6tbswk.aspx)にラップすると、デバッグ中にのみ発生します。また、標準サービスアカウント(ローカルサービスまたはネットワークサービス)に、必要なアクションを実行するための十分な権限を与えることも良い方法です。 *ちょうど十分な*、重要な部分です。 – Will