次の方法で共有


ClickOnce 配置でのセキュリティ、バージョン管理、マニフェストの問題

ClickOnce のセキュリティ、アプリケーションのバージョン管理、マニフェストの構文とセマンティクスにはさまざまな問題があり、ClickOnce の配置が成功しない可能性があります。

ClickOnce と Windows ユーザー アカウントコントロール

Windows Vista 以降のバージョンの Windows では、現在のユーザーが管理者権限を持つアカウントでログインしている場合でも、アプリケーションは既定で標準ユーザーとして実行されます。 アプリケーションが管理者権限を必要とするアクションを実行する必要がある場合は、オペレーティング システムに指示し、ユーザーに管理者資格情報の入力を求めます。 この機能は、ユーザー アカウント制御 (UAC) という名前で、アプリケーションがユーザーの明示的な承認なしにオペレーティング システム全体に影響を与える可能性のある変更を行うことを防ぎます。 Windows アプリケーションでは、アプリケーション マニフェストの requestedExecutionLevel セクションで trustInfo 属性を指定することで、このアクセス許可の昇格が必要であることを宣言します。

アプリケーションがセキュリティ昇格攻撃にさらされるリスクがあるため、UAC がクライアントに対して有効になっている場合、ClickOnce アプリケーションはアクセス許可の昇格を要求できません。 requestedExecutionLevel属性を requireAdministrator または highestAvailable に設定しようとする ClickOnce アプリケーションは、Windows Vista 以降のバージョンにはインストールされません。

場合によっては、Windows 上のインストーラー検出ロジックにより、ClickOnce アプリケーションが管理者権限で実行を試みる場合があります。 この場合、アプリケーション マニフェストの requestedExecutionLevel 属性を asInvokerに設定できます。 これにより、アプリケーション自体が昇格なしで実行されます。 Visual Studio は、この属性をすべてのアプリケーション マニフェストに自動的に追加します。

アプリケーションの有効期間全体にわたって管理者権限を必要とするアプリケーションを開発する場合は、代わりに Windows インストーラー (MSI) テクノロジを使用してアプリケーションを展開することを検討する必要があります。 詳細については、「 Windows インストーラーの基本」を参照してください。

オンライン アプリケーション クォータと部分信頼アプリケーション

ClickOnce アプリケーションがインストールではなくオンラインで実行される場合は、オンライン アプリケーション用に確保されたクォータ内に収まる必要があります。 また、セキュリティアクセス許可のセットが制限されているなど、部分的な信頼で実行されるネットワーク アプリケーションは、クォータ サイズの半分以下にすることはできません。

ClickOnce for .NET Core および .NET 5 以降では、コード アクセス セキュリティを必要とする部分信頼はサポートされていません。 .NET Framework では、コード アクセス セキュリティの使用はベスト プラクティスではなく、推奨されません。

詳細と、オンライン アプリケーション クォータを変更する方法の手順については、「 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 属性の両方で一意である必要があります。 両方の属性がマニフェスト内の 2 つの要素間で一致する場合、マニフェストの解析は成功しません。

マニフェストまたはアプリケーションを手動で変更する場合の注意事項

アプリケーション マニフェストを更新するときは、アプリケーション マニフェストと配置マニフェストの両方に再署名する必要があります。 配置マニフェストには、そのファイルのハッシュとそのデジタル署名を含むアプリケーション マニフェストへの参照が含まれています。

デプロイ プロバイダーの使用に関する注意事項

ClickOnce 配置マニフェストには、アプリケーションをインストールして処理する場所の完全なパスを指す deploymentProvider プロパティがあります。

<deploymentProvider codebase="http://myserver/myapp.application" />

このパスは、ClickOnce がアプリケーションを作成するときに設定され、インストールされているアプリケーションでは必須です。 このパスは、ClickOnce インストーラーがアプリケーションをインストールし、更新プログラムを検索する標準的な場所を指します。 xcopy コマンドを使用して ClickOnce アプリケーションを別の場所にコピーしても、deploymentProvider プロパティを変更しない場合でも、アプリケーションのダウンロード時に ClickOnce は元の場所を参照します。

アプリケーションを移動またはコピーする場合は、クライアントが新しい場所から実際にインストールされるように、 deploymentProvider パスも更新する必要があります。 アプリケーションをインストールした場合、このパスの更新は主に問題になります。 元の URL を使用して常に起動されるオンライン アプリケーションの場合、 deploymentProvider の設定は省略可能です。 deploymentProviderが設定されている場合は受け入れられます。それ以外の場合は、アプリケーションの起動に使用される URL が、アプリケーション ファイルをダウンロードするためのベース URL として使用されます。

マニフェストを更新するたびに、もう一度署名する必要もあります。

ClickOnce 配置のトラブルシューティングClickOnce アプリケーションをセキュリティで保護するClickOnce 配置戦略を選択する