2010-12-03 9 views
1

管理者権限が必要なカスタムアクションが含まれているwixを使用してインストーラをビルドしました。UACプロンプトは受け入れられますが、昇格していません(カスタムアクション)

現時点では、このインストーラはbuildin管理者アカウントによって実行されるときにのみ動作します。この場合、UACプロンプトは表示されません。
インストーラがローカル管理者グループの他のメンバーによって実行された場合は、UACプロンプトが表示されます。私のコンピュータに変更を加えることは許可されていますが、私のカスタムアクションのWindows API関数は "特権が不足しています"というエラーを返します...

私はカスタムアクションを延期するようにしましたが、

私はアイデアが不足しているので、あなたの助けが大歓迎です。

よろしく ラルフ

答えて

1

msidbCustomActionTypeNoImpersonateフラグを使用してカスタムアクションを実行してみてください(偽装を設定するには、「いいえ」): http://msdn.microsoft.com/en-us/library/aa368069(VS.85).aspx

それは完全な権限を持つローカルシステムアカウントで実行されます。この方法。このフラグを使用するには、あなたの行動を延期する必要があります。

1

私が知っている限り、インストールスクリプトはLocalSystemアカウントによって実行されます。 (http://msdn.microsoft.com/en-us/library/ms684190のように)このアカウントではいくつかの特権が無効になっています。たとえば、SE_BACKUP_NAMEはDISABLEDで、これはLoadUserProfileを呼び出すために必要です。

私はすでにAdjustTokenPrivileges API関数を使用していますが、成功していません。 LocalSystemアカウントにはTOKEN_ADJUST_PRIVILEGES権限がありますか?関連するSE_XXXXXX_NAME権限がわかりません。

よろしく ラルフ

1

は、私が見つけた解決策は、私は、ユーザーが適切な権限を持っていない場合、UACのために要求されますブートストラップと私のインストーラを合併しました。

この方法を使用したくない場合は、このコードを参考にしてください。

のpublic staticのActionResultのCHECKPRIVILEGES(セッションセッション)

{
 bool isadmin = false; 

     System.Security.Principal.WindowsIdentity wi = System.Security.Principal.WindowsIdentity.GetCurrent(); 
     System.Security.Principal.WindowsPrincipal wp = new System.Security.Principal.WindowsPrincipal(wi); 

     if (wp.IsInRole("Administrators")) 
      isadmin = true; 
     else 
      isadmin = false; 

     if (isadmin) 
     { 
      return ActionResult.Success; 
     } 
     else 
     { 
      if (System.Environment.OSVersion.Version.Major >= 6) // Windows Vista or higher 
       MessageBox.Show("Administrator priveleges are required to install the application. Please right click the setup file and select 'Run as administrator'.", "Mesaage", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      else 
       MessageBox.Show("Administrator priveleges are required to install the application.", "Mesaage", MessageBoxButtons.OK, MessageBoxIcon.Error); 

      return ActionResult.Failure; 
     } 
    } 
関連する問題