2

私はこの非常に頻繁に述べられている問題に遭遇しましたが、ほぼすべてのソースを調べた後でも、答えは得られませんでした. 問題は次のとおりです。

サーバーに接続してアプリケーションの新しいバージョンをチェックし、新しいバージョンをクライアント マシンにコピーする小さなアップデータ ツールを作成しました。したがって、パターンは次のとおりです。

クライアントは、特定のアプリケーションで事前に構成されたアップデーターをインストールします。したがって、基本的にアップデーターは Program Files フォルダーのどこかにあります。次に、アップデーターが開始され、サーバーに接続して最新バージョンを取得し、アップデーターがインストールされているのとまったく同じディレクトリにインストールします。したがって、クライアントは 2 つのアプリケーションがあることを知りません。アップデーターとアップデーターが対象とするメインアプリケーション。理解していただければ幸いです。

これが、Program Files フォルダーへのアクセスが必要な理由です。

私は Windows 7 で開発を行っており、ソフトウェアは 7 でも実行する予定です。

アップデーターが管理者によって実行されていることを確認する方法はありますか? アクセスするには管理者権限が必要ですか? 管理者権限を持っていてもアクセスが拒否されるので、他に何がありますか? ユーザーが持っている権限をコードでチェックする方法はありますか?

4

3 に答える 3

4

チェッカーとアップデーターを2つの異なるアプリに分割します。チェッカーは通常のユーザーとして実行できます。アップデートがあることを検出すると、アップデータを起動します。アップデータには、管理者権限が必要であることを示すマニフェストがあります。これにより、ユーザーはアクセスを許可するように求められます(UACが有効になっている場合)。

于 2010-08-18T10:47:49.257 に答える
2

Vista、7、および2008サーバーのセキュリティモデルのため、マニフェストを作成して、アプリケーションに必要なアクセスレベルを使用に通知し、管理者権限を自動的に要求するようにする必要があります(UACなしで実行されている場合)。

于 2010-08-18T10:46:20.883 に答える
0

アプリでapp.manifestを使用します。requireadministratorをtrueに設定します。または、以下のxmlをコピーして貼り付けます

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the 
            requestedExecutionLevel node with one of the following.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            If you want to utilize File and Registry Virtualization for backward 
            compatibility then delete the requestedExecutionLevel node.
        -->
<requestedExecutionLevel  level="requireAdministrator" uiAccess="true" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

上記はvb.netアプリです。

于 2010-08-18T10:49:08.987 に答える