web-dev-qa-db-ja.com

「カスタムアクションファイルが見つからない状態でプロジェクトをセットアップする」例外を修正するにはどうすればよいですか?

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を実行しています。

役立つ場合に備えて、依存関係の名前を提供します。

  • Microsoft .NET Framework
  • Microsoft.SqlServer.DtsMsg.dll
  • Microsoft.SqlServer.DTSPipelineWrap.dll
  • Microsoft.SqlServer.DTSRuntimeWrap.dll
  • Microsoft.SQLServer.ManagedDTS.dll
  • Microsoft.SqlServer.msxml6_interop.dll
  • Microsoft.SqlServer.PipelineHost.dll
  • Microsoft.SqlServer.SqlTDiagM.dll

依存関係から収集できるように、WindowsサービスはDTSXパッケージへの呼び出しをスケジュールしています。

長い怒りでごめんなさい。あなたが提供できるどんな助けにも感謝します。

25
mikesigs

答えはとてつもなく単純です。 CustomActionDataの最後の引数にスペースが含まれるため、引用符と末尾のスラッシュで囲む必要がある場合は、次のように末尾のスラッシュの後にスペースも含める必要があります。

/TimeToRun="[TIMETORUN]\" /TargetDir="[TARGETDIR]\ "

解決策と説明は見つけることができます ここ

41
mikesigs

同様の問題がありました。私の場合、インストーラーが1回正常に実行された後、[プログラムの追加と削除]を使用してアプリを正常にアンインストールし、コーディングを行って(CustomActionData文字列に触れなかった)、プロジェクトを再構築したため、奇妙でした。プロジェクトをセットアップします。このエラーが発生したのは、MSIを再実行したときです。

私が行ったコーディングは、CustomActionData文字列で指定していたより多くのパラメーターのより多くの値を取り込むことでした。インストーラークラスにあったパラメーター値(つまり、string filepath = Context.Paramenters["filepath"])を取得するための構文は実際には問題ありませんでしたが、私が知ったように、現在取得しようとしている後のパラメーターの構文はCustomActionData文字列は最初から正しくありませんでした。これらのパラメーターの1つを囲む2番目の引用符を追加できなかったため、他に何も取得できませんでした。

ユーザーインターフェイスセクションの「テキストボックス(A)」ウィンドウと「テキストボックス(B)」ウィンドウを使用していました。 Aにはファイルへのパスを取得するEDITA1という1つのボックスがあり、Bにはいくつかのデータベースパラメータ用にEDITB1EDITB2という2つのボックスがあります。私のCustomActionData文字列は次のようになりました:

/filepath="[EDITA1]" /Host="[EDITB1] /port="[EDITB2]" 

それはすべきだった:

/filepath="[EDITA1]" /Host="[EDITB1]" /port="[EDITB2]" 

[EDITB1]の引用符を閉じる)

1
vapcguy