Windowsサービスのセットアッププロジェクトを作成しようとしています。 http://support.Microsoft.com/kb/816169 の指示に従って、問題なくセットアッププロジェクトを作成しました。
App.configをユーザーの希望する設定で更新するために、インストール中に値を取得できるようにしたい。値を取得するためにTextboxes(A)ダイアログを追加しました。 Edit1Propertyプロパティを "TIMETORUN"に設定し、プライマリ出力アクションのCustomActionDataプロパティ私は以下に入れました:/ TimeToRun = "[TIMETORUN] \"。ここまでは順調ですね。セットアップを実行すると、Context.ParametersからTimeToRun値を取得できます問題なくコレクション。
App.configを見つけるには、[〜#〜] targetdir [〜#〜]Windowsインストーラープロパティの値も渡す必要があります。私のカスタムアクションに。これは物事が崩壊し始めるところです。これを実現するには、上記のCustomActionDataを次のように変更する必要があります:/ TimeToRun = "[TIMETORUN]\"/ TargetDir =" [TARGETDIR]\"。セットアップを実行すると、次のエラーメッセージが表示されます。
エラー1001。インストールの初期化中に例外が発生しました。 System.IO.FileNotFoundException:ファイルまたはアセンブリ 'file:/// C:\ Windows\SysWOW64\Files'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。
この問題をグーグルで検索すると、末尾のスラッシュを/ TargetDir = "[TARGETDIR] \"の部分に追加するだけで、必然的に大きな成功を収めている人々を見つけることができます。 CustomActionData。残念ながら、これでは私の問題は解決しません。
CustomActionData文字列のさまざまなバリエーションを試しましたが、どれも機能しませんでした。オーバーライドされたInstallメソッドからファイルにログを記録して、破損の場所を特定しようとしましたが、それほど遠くないため、ログファイルは作成されません。エラーが示すように、障害は初期化ステップ中に発生します。
セットアッププロジェクトがロードしようとしている依存関係の1つである可能性があるという予感があります。おそらく、何らかの理由でCustomActionData文字列に何かが追加されており、[〜#〜]でうまく機能していません。 targetdir [〜#〜]値(スペースを含む、つまり「C:\ ProgramFiles\MyCompany\ProjectName」)。繰り返しになりますが、これはセットアッププロセスをデバッグできないため、確認できないもう1つの予感です。
もう1つ言及すべきことは、はい、それは別の予感です。これは、64ビットバージョンのWindowsのセットアッププロジェクトの問題である可能性がありますか?私はWindows7Professionalを実行しています。
役立つ場合に備えて、依存関係の名前を提供します。
依存関係から収集できるように、WindowsサービスはDTSXパッケージへの呼び出しをスケジュールしています。
長い怒りでごめんなさい。あなたが提供できるどんな助けにも感謝します。
答えはとてつもなく単純です。 CustomActionData
の最後の引数にスペースが含まれるため、引用符と末尾のスラッシュで囲む必要がある場合は、次のように末尾のスラッシュの後にスペースも含める必要があります。
/TimeToRun="[TIMETORUN]\" /TargetDir="[TARGETDIR]\ "
解決策と説明は見つけることができます ここ 。
同様の問題がありました。私の場合、インストーラーが1回正常に実行された後、[プログラムの追加と削除]を使用してアプリを正常にアンインストールし、コーディングを行って(CustomActionData文字列に触れなかった)、プロジェクトを再構築したため、奇妙でした。プロジェクトをセットアップします。このエラーが発生したのは、MSIを再実行したときです。
私が行ったコーディングは、CustomActionData文字列で指定していたより多くのパラメーターのより多くの値を取り込むことでした。インストーラークラスにあったパラメーター値(つまり、string filepath = Context.Paramenters["filepath"]
)を取得するための構文は実際には問題ありませんでしたが、私が知ったように、現在取得しようとしている後のパラメーターの構文はCustomActionData文字列は最初から正しくありませんでした。これらのパラメーターの1つを囲む2番目の引用符を追加できなかったため、他に何も取得できませんでした。
ユーザーインターフェイスセクションの「テキストボックス(A)」ウィンドウと「テキストボックス(B)」ウィンドウを使用していました。 Aにはファイルへのパスを取得するEDITA1
という1つのボックスがあり、Bにはいくつかのデータベースパラメータ用にEDITB1
とEDITB2
という2つのボックスがあります。私のCustomActionData文字列は次のようになりました:
/filepath="[EDITA1]" /Host="[EDITB1] /port="[EDITB2]"
それはすべきだった:
/filepath="[EDITA1]" /Host="[EDITB1]" /port="[EDITB2]"
([EDITB1]
の引用符を閉じる)