2009-07-14 6 views
1

私のアプリケーション(Windowsサービス)は、設定ファイルの場所である1つのコマンドライン引数を必要とします。C#Windowsサービス - インストール時のデフォルト引数

サービスを自動的に開始できるようにします。 「スタートアップパラメータ」の値の入力は、手動で開始する場合にのみ適用され、サービスが停止された後にその値が引き継がれることはありません。

(引数としてパスの第二セクションを取って)私は、レジストリで「実行可能ファイルへのパスを」編集手動で試してみましたが、それは、コマンドラインであるかのように、.NETサービスはそれをregocniseていませんインストール時にデフォルト引数を設定する方法はありますか(InstallUtilを使用するか、他の方法を使用しますか)?

おかげ

答えて

1

Environment.GetCommandLineArgs Methodを使用して

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<your service>\ 

それが開始されるとき、あなたはあなたのサービスでそれらを読むことができます。

+0

だから、OnStartのargsパラメータでなく、Environment.GetCommandLineArgsを使用するだけですか? ありがとうリック。私は明日そのショットを与えるでしょう。 –

0

我々はこれを行うには、アプリの設定ファイルを使用して、サービスは、それがそこから初期化オプションを読むことができます。あなたがで見つかったのImagePathパラメータの値にそれらを追加することにより、あなたのサービスにコマンドラインパラメータを追加することができます

+0

- これは私が渡ししようとしている設定ファイルの場所です 作業ディレクトリではないので、私はデフォルトの設定ファイル(例えばconfig.xmlの)を使用することはできません。どこで私のアプリケーションはWindowsサービスなのですか?設定ファイルは、アプリケーションと同じ場所にある必要があります。 –

+0

myapp.exe.configを(プロジェクトにapp.configを追加して)使用し、 'ConfigurationManager.AppSettings [" StateServerPort "]'で設定を読むと、このファイルは作業ディレクトリの代わりにappディレクトリから読み込まれます。 –

+0

作業ディレクトリではなく、どこから実行しているのかを知りたい場合は、リフレクションを使用して実行可能ファイルの場所を知ることもできます。 –

0

サービスインストーラを使用すると、インストール後の操作やバッチファイルの実行を必要とせずに、インストーラの設定に基づいてレジストリ設定を行うことができます。

ことだ
Imports System.ComponentModel 
Imports System.Configuration.Install 

Public Class ProjectInstaller 

    Public Sub New() 
     MyBase.New() 

     'This call is required by the Component Designer. 
     InitializeComponent() 

     'Add initialization code after the call to InitializeComponent 

    End Sub 

    Private Sub ServiceInstaller1_AfterInstall(ByVal sender As System.Object, ByVal e As System.Configuration.Install.InstallEventArgs) Handles ServiceInstaller1.AfterInstall 
'Put some code regarding your Installation specific options. 
    End Sub 
End Class 
関連する問題