2012-02-01 18 views
3

インストーラには、Windowsサービスに接続していくつかのパラメータを設定するカスタムアクションがあります。 サービスを正常に使用するには、特権を昇格して実行する必要があります。Wixインストーラ - 実行時に管理者権限で変更を実行する方法コントロールパネルのプログラムをアンインストールまたは変更する

ユーザーが[インストール]ボタンをクリックすると初めてインストールされ、UACプロンプトが表示され、インストールが正常に完了します。ただし、ユーザーが製品の変更(新しい機能の追加)を決定すると、サービスへの呼び出しが失敗します。これは、インストーラが特権モードで実行されていないために発生します。管理者権限を持つコマンドプロンプトからインストーラを起動すると、変更操作も正常に完了します。

私はブートストラッパーの作成を提案しているarticleを見つけました。これを達成するための簡単な方法はありますか?

私はカスタムアクションを正しく実装しましたか?カスタムアクションコードはこちら

 <CustomAction Id='SetParams' BinaryKey='Setup.CustomAction' DllEntry='SetParameters' Execute='deferred' Impersonate='no' Return='asyncWait'/> 
<Binary Id='Setup.CustomAction' SourceFile='$(var.CustomActionDll)' /> 

<InstallExecuteSequence> 
    <Custom Action='SetParams' Before='InstallFinalize'><![CDATA[REMOVE <> "ALL"]]></Custom> 
</InstallExecuteSequence> 

アップデート:Cosminのコメント後、私はCAのセッションデータにアクセスしていました。 SetParams CAは、UIシーケンスで生成された動的プロパティを使用します。遅延CA内のデータにアクセスするために、私は即座にこのデータを抽出し、それをCustomActionDataに格納する直系のCAを作成しました。

<CustomAction Id='SaveParams' BinaryKey='Setup.CustomAction' DllEntry='SaveParameters' Execute='immediate' Return='check'/> 
<CustomAction Id='SetParams' BinaryKey='Setup.CustomAction' DllEntry='SetParameters' Execute='deferred' Impersonate='no' Return='check' /> 

<Custom Action='SaveParams' Before='SetParams'><![CDATA[REMOVE <> "ALL"]]></Custom> 
    <Custom Action='SetParams' Before='InstallFinalize'><![CDATA[REMOVE <> "ALL"]]></Custom> 

続いてこのアプローチが機能するカスタムアクション

propertyName = moduleInfo.GetPropertyName(moduleParameter.Name); 
customActionData.Append(string.Format(CultureInfo.InvariantCulture, "{0}={1};", propertyName, session[propertyName])); 

でSaveParameters方法の一部です! admin cmdから起動したとき、セッション[propertyName]は正しい値を返しますが、非昇格cmdプロンプトからインストーラの変更を実行すると、即時CAセッションのプロパティ値にアクセスできません[propertyName]が空の文字列を返します。

私はWXSファイルに定義された(静的)プロパティにアクセスすることができます

<Property Id="INSTALL" Secure="yes" /> 

しかし

ない、人の私がこの

session[property] = parameters[paramcount++]; 
+0

偽装属性は、カスタムアクションが完全な権限で実行されることを保証します。 –

+0

@CosminPirvu私は、インストーラの実行(変更op)をユーザコマンドプロンプトと管理cmdから実行しようとしました。管理者cmdのカスタムアクションの場合は完璧に動作し、通常のcmdの場合は、コントロールパネルから変更を開始したときと同じように動作します。明らかに、カスタムアクションの呼び出しは管理者として実行されていないため失敗します。 – MrBob

+0

@CosminPirvuあなたは正しいです。私はCAのセッションデータにアクセスしていました。 SetParams CAは、UIシーケンスで生成された動的プロパティを使用します。遅延CA内のデータにアクセスするために、私は即座にこのデータを抽出し、それをCustomActionDataに格納する直系のCAを作成しました。このアプローチは機能します!しかし、私が非昇格のcmdプロンプトからインストーラの変更を実行すると、即時のCAのプロパティ値にアクセスできません。どうして? – MrBob

答えて

1

のようなUIシーケンス内の他のいくつかの即時カスタムアクションに追加しました偽装属性が設定されていない遅延カスタムアクションは、CAが昇格モードで実行されることを保証します。

新しく追加された問題を解決するためにquestionを追加しました。ダイナミックプロパティ値の問題にで述べたように実行フェーズで

  • アクションは、セキュアな特性からデータ にアクセスすることができUIシーケンスに実行 シーケンスから移動する性質を読み取っ

    1. 即時アクションへのアクセスに

      ソリューション質問。プロパティ がCAで動的に作成された場合は、 SecureCustomPropertiesシステムプロパティに追加する必要があります。セパレータの文字は ';'です。

  • 関連する問題