« Vistaとパーティション | メイン | レポート作成の味方 »

Vista:古いアプリケーションのインストール

2007年01月22日

Vistaにするとインストールできないプログラムがあった。 このMicrosoftのサイトにある下記記述が参考になるかもしれないと思う。著作権侵害になるのかな? 一番下にこの記述があったURLを書きますので、いろいろ調べたい人はそちらでどうぞ。長いです。。。

ユーザー アカウント制御 (UAC)

機能の影響

概要

Windows のセキュリティを高めるための根本的な方法は、PC を利用するユーザーが、 限定的な許可や権限のセットにしかアクセスできない標準ユーザー アカウントで実行できるようにすることです。既定では、 ユーザーが管理者グループのメンバーとしてログオンしていても、Windows Vista ではすべてのアプリケーションを標準ユーザーとして実行します。逆に、 管理者の許可が必要とされているアプリケーションをユーザーが起動しようとすると、システムは明示的にユーザーの目的を確認しようとします。 管理者権限で実行しているアプリケーションのみが、システムとグローバルの設定と動作を変更できます。この Windows Vista の機能が、ユーザー アカウント制御 (UAC) です。

現象

  • カスタム インストーラ、アンインストーラ、およびアップデータが検出されず、 管理者として実行するために昇格できない場合があります。
  • 標準ユーザー アプリケーションがタスクの実行に管理者権限を必要とする場合、アプリケーションに障害が発生するか、 あるいは標準ユーザーがこのタスクを利用できないことがあります。
  • 現在のユーザーが必要な許可を持っていない場合、タスクを実行しようとするアプリケーションに障害が発生することがあります。 障害がどのように表れるかは、アプリケーションの作成方法によって異なります。
  • 管理タスクやシステム全体に影響を及ぼす変更を行うコントロール パネル アプリケーションが、正常に機能せず、 エラーが発生することがあります。
  • RunDLL32.EXE を使用して実行される DLL アプリケーションが、 グローバル操作を実行する場合に正常に機能しないことがあります。
  • 標準ユーザー アプリケーションがシステム全体の設定の保存場所に書き込みを行うと、 仮想化によってユーザーごとの設定の保存場所にリダイレクトされます。

対処策

カスタム インストーラ用の解決策:

  • インストーラまたはアップデータを起動するには、右クリックして [管理者として実行] をクリックします。
  • アプリケーション互換性修正プログラムを適用し、特定のインストーラが昇格を必要とすることを示します。そのためには、 ショートカットまたは EXE を右クリックし、[互換性] タブから Windows XP SP2 互換モードを適用します。

システムの変更や、権限が設定された領域への書き込みに管理者権限が必要なアプリケーション用の簡単な解決方法を次に示します。

  • 企業ユーザーは、アプリケーション互換性修正プログラムを適用し、レガシー アプリケーションを正常に実行するためには管理者の許可や管理者権限が必要であることを示すことができます。
  • 一定の制限されたファイルについてアクセス制御リスト (ACL) の制限を軽減すると、 アプリケーションがこれらのファイルへの書き込みを行いやすくなる場合があります。
  • 仮想化フォルダやレジストリ キーをチェックして、 アプリケーションが管理者権限を必要とするものにアクセスしているかどうか確認します。この情報を利用して、 アプリケーションの将来のバージョンから、管理者によって保護された場所へのアクセス要求をなくすことができます。 仮想化されたファイル、フォルダ、および場所については、「リンク」セクションを参照してください。
  • 別の EXE に RunDll32.exe による DLL の呼び出しを含め、この EXE のマニフェストで、 権限の昇格を要求します。

互換性の検証:

  • すべてのインストール、アンインストール、更新のシナリオにおいて、ユーザーに同意または資格情報の入力を求めるようにします。 ユーザーの同意が受理されると、操作が次に進みます。
  • エラーが発生したシナリオを組み込み管理者として再現します。このシナリオが成功した場合、 エラーの原因は権限の不足によると考えられます。
  • アプリケーション互換性ツールキットの Compatibility Administrator の User Account Control Predictor ツールを使用して、管理者操作を行っているアプリケーションの領域を識別します。

Windows Vista に対応した解決策の活用:

  • Windows Vista ベース アプリケーションでは、以下を実行する必要があります。
    • Windows Vista のロゴ プログラムにある技術要件およびユーザー エクスペリエンス (UX) ガイドラインなどのドキュメントに従います (「リンク」セクションを参照)。
    • 埋め込みマニフェストを使用して、特定の requestedExecutionLevel (以前は RunLevel) を示します。
    • 管理機能と非管理機能をすべて別の EXE に分けます。より高い権限が必要なすべての機能は、 実行レベルが明示された別の実行可能 EXE ファイルや管理者権限で実行される COM オブジェクト内に格納します。 管理タスクは必要な場合にのみ起動します。これはすべてのアプリケーションに当てはまります。
  • 特に管理機能を持たないアプリケーションの場合は、管理者の許可や管理者権限を必要としないようにコードを修正します。
  • 管理者のみが使用するアプリケーションの場合は、 アプリケーションが管理者の許可や管理者権限を使用して実行されるようになんらかの形で表記します。
  • アプリケーションを更新するときは、別のアップデータ EXE を使用してターゲット アプリケーションを更新します。
  • コントロール パネル アプリケーションは .cpl ファイルから .exe ファイルに置き換え、EXE 形式のコントロール パネル アプリケーションには、必要な実行レベルを指定したマニフェストを含めます。
  • 昇格が必要な RunDLL32.EXE で実行する DLL は、マニフェストに示された昇格レベルで、実行可能な EXE に変更します。
  • 可能な場合は、常に読み取り専用でファイルやレジストリ キーにアクセスします。 読み取り/書き込みモードでのアクセスは必要な場合のみ使用し、操作が完了したら、許可を元の読み取り専用に戻します。

リンク

下記URLからの複写です。
http://www.microsoft.com/japan/msdn/windowsvista/general/AppComp.aspx

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)