ClickOnce 配置でのセキュリティ、バージョン管理、およびマニフェストの問題
ClickOnce のセキュリティ、アプリケーションのバージョン管理、マニフェストの構文とセマンティクスに関し、ClickOnce 配置が成功しなくなる可能性があるさまざまな問題が存在します。
ClickOnce と Windows のユーザー アカウント制御
Windows Vista 以降のバージョンの Windows では、現在のユーザーが管理者アクセス許可を持つアカウントでログインしている場合でも、アプリケーションは既定で、標準ユーザーとして実行されます。 アプリケーションで管理者アクセス許可が必要なアクションを実行する必要がある場合は、アプリケーションからオペレーティング システムに伝えられ、その後ユーザーに、管理者の資格情報の入力を求めるメッセージが表示されます。 ユーザー アカウント制御 (UAC) という名前のこの機能では、ユーザーの明示的承認なしにアプリケーションがオペレーティング システム全体に影響を与える可能性がある変更を加えることが防止されます。 Windows アプリケーションは、アプリケーション マニフェストの trustInfo
セクションで requestedExecutionLevel
属性を指定することによって、このアクセス許可の昇格が必要であることを宣言します。
アプリケーションがセキュリティ昇格攻撃にさらされるリスクがあるため、クライアントで UAC が有効になっていると、ClickOnce アプリケーションはアクセス許可の昇格を要求できません。 requestedExecutionLevel
属性を requireAdministrator
または highestAvailable
に設定しようとする ClickOnce アプリケーションはいずれも、Windows Vist 以降のバージョンにインストールされません。
場合によっては、Windows でのインストーラー検出ロジックが原因で、ClickOnce アプリケーションが管理者アクセス許可を使用して実行を試みることがあります。 この場合は、アプリケーション マニフェストで requestedExecutionLevel
属性を asInvoker
に設定できます。 これにより、アプリケーション自体が昇格なしで実行されるようになります。 Visual Studio の場合、すべてのアプリケーション マニフェストにこの属性が自動的に追加されます。
アプリケーションの有効期間全体で管理者アクセス許可を必要とするアプリケーションを開発している場合は、代わりに Windows インストーラー (MSI) テクノロジを使用してアプリケーションを配置することを検討してください。 詳細については、「Windows インストーラーの基本事項」を参照してください。
オンライン アプリケーション クォータと部分信頼アプリケーション
ClickOnce アプリケーションがインストールを通してではなく、オンラインで実行される場合は、オンライン アプリケーション用に確保されているクォータに収まる必要があります。 また、部分信頼で実行されるネットワーク アプリケーション (セキュリティ アクセス許可の制限付きセットを使用するなど) は、クォータ サイズの半分より大きくすることはできません。
オンライン アプリケーションのクォータを変更する方法の詳細と手順については、「ClickOnce キャッシュの概要」を参照してください。
バージョン管理に関する問題
アセンブリに厳密な名前を割り当てて、アプリケーションの更新を反映するようにアセンブリのバージョン番号を増やすと、問題が発生することがあります。 厳密な名前が付けられたアセンブリへの参照を使用してコンパイルされたすべてのアセンブリは、それ自体の再コンパイルが必要です。そうしないと、アセンブリは古いバージョンを参照しようとします。 アセンブリでこれが試みられるのは、アセンブリではバインド要求内で古いバージョンの値が使用されているためです。
たとえば、独自のプロジェクト内に、バージョン 1.0.0.0 の厳密な名前が付けられたアセンブリがあるとします。 アセンブリのコンパイル後に、メイン アプリケーションを含むプロジェクトへの参照としてそれを追加します。 アセンブリを更新してバージョンを 1.0.0.1 に増やし、アプリケーションを再コンパイルせずに配置しようとすると、実行時にアプリケーションでアセンブリを読み込めなくなります。
このエラーは、ClickOnce マニフェストを手動で編集している場合にのみ発生する可能性があります。Visual Studio を使用して配置を生成した場合、このエラーは発生しないはずです。
マニフェストで個々の .NET Framework アセンブリを指定する
以前のバージョンの .NET Framework アセンブリを参照するように ClickOnce 配置を手動で編集した場合、アプリケーションの読み込みは失敗します。 たとえば、マニフェストで指定されているバージョンより前のバージョンの .NET Framework に向けた System.Net アセンブリへの参照を追加した場合は、エラーが発生します。 一般に、アプリケーションの実行対象となる .NET Framework のバージョンは、アプリケーション マニフェストで依存関係として指定されているため、個々の .NET Framework アセンブリへの参照を指定しようとしないでください。
マニフェストの解析に関する問題
ClickOnce によって使用されるマニフェスト ファイルは XML ファイルであり、適切な形式かつ有効である必要があります。これらは、XML 構文規則に従っていて、関連する XML スキーマで定義されている要素と属性のみを使用している必要があります。
マニフェスト ファイルで問題を発生させる可能性があるのは、アプリケーションの名前として、単一引用符や二重引用符などの特殊文字が含まれる名前を選択することです。 アプリケーションの名前は、その ClickOnce ID の一部です。 ClickOnce では、現在、特殊文字が含まれる ID は解析されません。 アプリケーションをアクティブにできない場合は、名前でアルファベットと数字の文字だけが使用されていることを確認し、もう一度配置を試みてください。
配置またはアプリケーションのマニフェストを手動で編集した場合は、それらを意図せず破損している可能性があります。 マニフェストが破損していると、正しい ClickOnce をインストールできません。 [ClickOnce エラー] ダイアログ ボックスの [詳細] をクリックし、ログのエラー メッセージを読むことで、実行時のそのようなエラーをデバッグできます。 ログには、以下のメッセージのいずれかが示されます。
構文エラーの説明と、エラーが発生した行番号および文字位置。
マニフェストのスキーマの違反で使用された要素または属性の名前。 マニフェストに手動で XML を追加した場合は、マニフェスト スキーマへの追加の内容と比較する必要があります。 詳細については、「ClickOnce 配置マニフェスト」と「ClickOnce アプリケーション マニフェスト」を参照してください。
ID が競合しています。 配置マニフェストとアプリケーション マニフェストの依存関係の参照は、
name
属性とpublicKeyToken
属性の両方で一意である必要があります。 1 つのマニフェスト内のいずれか 2 つの要素間で両方の属性が一致する場合、マニフェストの解析は成功しません。
マニフェストまたはアプリケーションを手動で変更する際の注意事項
アプリケーション マニフェストを更新するときは、アプリケーション マニフェストと配置マニフェストの両方に再署名する必要があります。 配置マニフェストには、そのファイルのハッシュと、そのデジタル署名を含むアプリケーション マニフェストへの参照が含まれています。
配置プロバイダーの使用に関する注意事項
ClickOnce 配置マニフェストには、アプリケーションをインストールしてサービスを提供する場所の完全パスを指し示す deploymentProvider
プロパティが含まれています。
<deploymentProvider codebase="http://myserver/myapp.application" />
このパスは、ClickOnce によってアプリケーションが作成されるときに設定され、インストールされたアプリケーションには必須です。 このパスが指し示すのは、ClickOnce インストーラーによってアプリケーションがインストールされ、更新プログラムが検索される標準の場所です。 xcopy コマンドを使用して ClickOnce アプリケーションを別の場所にコピーしても、deploymentProvider
プロパティを変更しないと、ClickOnce では、アプリケーションのダウンロードを試みるときに引き続き元の場所を参照します。
アプリケーションを移動またはコピーする場合は、deploymentProvider
のパスも更新して、クライアントが実際に新しい場所からインストールされるようにする必要があります。 インストール済みのアプリケーションがある場合は、このパスを更新するとたいていは問題が生じます。 常に元の URL を使用して起動されるオンライン アプリケーションの場合、deploymentProvider
の設定は省略可能です。 deploymentProvider
が設定されている場合は、それが尊重されます。それ以外の場合は、アプリケーションの起動に使用される URL が、アプリケーション ファイルをダウンロードするためのベース URL として使用されます。
Note
マニフェストを更新するたびに、それに再度署名する必要もあります。
関連するコンテンツ
ClickOnce 配置のトラブルシューティングClickOnce アプリケーションのセキュリティ保護ClickOnce 配置ストラテジの選択