2012-01-06 17 views
0

install4jを使用してWindowsサービスを作成しましたが、すべて動作しますが、コマンドライン引数をサービスに渡す必要があります。私は、新しいサービス・ウィザードでサービスの作成時にそれらを設定することができます知っているが、私はすなわち、レジスタserviceコマンドに引数を渡すためにどちらか期待していた:install4j:Windowsサービスにコマンドライン引数を渡すにはどうすればいいですか

myservice.exe --install --arg arg1=val1 --arg arg1=val2 "My Service Name1" 

または.vmoptionsでそれらを置くことでは以下のようにファイル

-Xmx256m 
arg1=val1 
arg2=val2 

これを行うための唯一の方法はexe4j.launchNameを介してサービス名をピックアップし、その特定のサービスのために必要な構成を有しているいくつかの他のファイルや環境変数をロードするために自分のコードを変更することであるように思えます。私は過去にjavaのための他のサービス作成ツールを使用してきましたが、それらはすべてユーザーが登録したコマンドライン引数を直接サポートしていました。

答えて

0

私はあなたが1月にこれを尋ねたことは知っていますが、これを理解しましたか?

val1、val2などをどこから調達しているのか分かりません。インストールプロセスでは、ユーザーがフォームのフィールドに入力していますか?それらがあると仮定すると、これは私がしばらく前に直面したものと同様の問題です。

私のアプローチは、必要なフィールド(テキストフィールドオブジェクト)を持つ設定可能なフォームを持ち、明らかにテキストフィールドの値に変数を割り当てました( 'ユーザー入力/変数名'カテゴリテキストフィールド)。

インストールプロセスの後半で、私は何をしたいのかを達成するために、いくつかのJavaでそれに接続されたスクリプトの実行アクションが表示された進行状況の表示画面を持っていました。

オプションで、install4jで変数をこのように設定すると、2つの 'gotchas'があります。まず、変数HASは空の文字列の場合でも、何に関係なく設定されます。したがって、ユーザーがフィールドを空白のままにした場合(つまり、その引数をサービスに渡したくない場合)、実行可能ファイルの実行またはサービスの起動タスクに空の文字列を指定する必要があります)第二に、引数はスペースを持つことができません。スペースで区切られた引数はそれぞれ独自の行を持たなければなりません。念頭に置いて

は、ここにあなたが望むものを達成かもしれない実行スクリプトコードスニペットです:

final String[] argumentNames = {"arg1", "arg2", "arg3"}; 
// For each argument this method creates two variables. For example for arg1 it creates 
// arg1ArgumentIdentifierOptional and arg1ArgumentAssignmentOptional. 
// If the value of the variable set from the previous form (in this case, arg1) is not empty, then it will 
// set 'arg1ArgumentIdentifierOptional' to '--arg', and 'arg1ArgumentAssignmentOptional' to the string arg1=val1 (where val1 
// was the value the user entered in the form for the variable). 
// Otherwise, both arg1ArgumentIdentifierOptional and arg1ArgumentAssignmentOptional will be set to empty. 
// 
// This allows the installer to pass both parameters in a later Run executable task without worrying about if they're 
// set or not. 

for (String argumentName : argumentNames) { 
    String argumentValue = context.getVariable(argumentName)==null?null:context.getVariable(argumentName)+""; 
    boolean valueNonEmpty = (argumentValue != null && argumentValue.length() > 0); 
    context.setVariable(
     argumentName + "ArgumentIdentifierOptional", 
     valueNonEmpty ? "--arg": "" 
    ); 
    context.setVariable(
     argumentName + "ArgumentAssignmentOptional", 
     valueNonEmpty ? argumentName+"="+argumentValue : "" 
    );  
} 

return true; 

は、最後のステップは、サービスや実行ファイルを起動することです。サービスの仕組みはあまり分かりませんが、実行可能ファイルを使用してタスクを作成し、「引数」フィールドを編集して行の区切りの値リストを与えます。

だからあなたの場合には、それは次のようになります。

--install 
${installer:arg1ArgumentIdentifierOptional} 
${installer:arg1ArgumentAssignmentOptional} 
${installer:arg2ArgumentIdentifierOptional} 
${installer:arg2ArgumentAssignmentOptional} 
${installer:arg3ArgumentIdentifierOptional} 
${installer:arg3ArgumentAssignmentOptional} 

「マイ・サービス名1」

そして、それはそれです。もし誰かがこれを行う方法を知っていれば、この方法で改善する気がします(これはinstall4j 4.2.8、btwのためです)。

関連する問題