8

起動時に新しいバージョンをチェックし、必要に応じて新しいバージョンをダウンロードして実行する一連のプログラムがあります。Windows 7 が「標準ユーザー」としてロックダウンされている場合、これは明らかに問題であり、c:\program files ディレクトリ以下に書き込むことはできません。問題を回避するアプリケーションの例を見た人はいますか?

私たちのアプリケーションは Delphi で書かれていますが、どの言語の例も役に立ちます。

前もって感謝します

アップデート:

新しいバージョンが存在するかどうかを判断するためのシステムは既にあります。唯一の問題は、昇格が必要なため、ダウンロードとインストール (必要な場合) です。昇格のプロンプトを必要としない方法や、ユーザーがセキュリティ設定を下げる方法は考えられません。

更新 2:

ここに新しい質問を追加するのではなく、後続の質問をしました

4

8 に答える 8

7

アプリケーションのインストールには 2 つのオプションがあります。

  1. アプリケーションはすべてのユーザーが利用できます: インストールまたは更新には、Windows Vista 以降の昇格が必要です
  2. アプリケーションは1 人のユーザーが使用できます: %LOCALAPPDATA%のユーザー プロファイルでアプリケーションをインストールまたは更新します。昇格は必要ありません

広告 2: Google Chromeがこれを行います。ここに .exe をインストールします。

%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe

--jeroen

于 2010-03-06T09:53:28.173 に答える
6

通常、権限をエスカレートする必要がある場合にアプリケーションが行うことは、次のようなものです。

  1. アップグレードが必要かどうかをアプリケーションが判断
  2. アプリケーションは、「管理者」権限を必要とする「アップデータ」サービスを起動します
  3. この更新でアプリケーションが自動的に更新されます
  4. アプリケーションの再起動

これは非常に一般的なシナリオです。特に、独自の DLL を更新するには、とにかくセカンダリ プロセスに移動する必要があるためです。

于 2010-03-05T15:02:55.973 に答える
3

更新の課題を回避するためのヒントをいくつか紹介します。

  1. ファイルの名前が「update.exe」または「install.exe」である場合、UAC 昇格プロンプトが自動的に強制されます。これは、既存のソフトウェアに Windows Vista/7 のアクセス許可をバイパスさせる簡単な方法です。
  2. アプリケーション内から更新チェックと更新プロセスを管理することはお勧めできません。問題は、アプリがファイルをロックする可能性が高く、アプリ自体を更新する必要があることです。外部アプリが更新を管理する必要があります。
  3. 最も簡単な更新ソリューションは、現在の製品のバージョン番号を確認する HTTP 呼び出しを行い、必要に応じてインストーラー バイナリをダウンロードすることです。これは更新の柔軟性を提供しませんが、迅速かつ簡単な解決策です。

当社は、特に Windows 7 UAC の自動更新に役立つソフトウェアを販売しています (ここをクリックして AutoUpdate+ にアクセスできます:リンク テキスト)。サード パーティのソリューション (任意のソリューション) を使用する最大の理由は、更新の柔軟性が向上し、さまざまな Windows リリースをサポートするという厄介な課題を回避できることです。

于 2010-06-14T15:37:10.113 に答える
1

アプリケーションがインストーラーにMSI(Windowsインストーラー)を使用している場合、ユーザーアカウント制御パッチを適用すると、適切に構成されていれば、昇格せずに更新プログラムをインストールできます。

于 2010-06-14T15:44:57.507 に答える
1

更新作業とは別の実行可能ファイルが必要です。アップデータには、昇格が必要であることを示すマニフェストが必要です。

参照: http: //msdn.microsoft.com/en-us/library/bb756929.aspx

于 2010-03-05T21:42:24.370 に答える
1

アプリは、リモート サーバーで新しいバージョンが利用可能かどうかを確認できます。その場合、ユーザーの一時フォルダーなど、ユーザー固有のフォルダーのいずれかに更新ファイルをダウンロードできます。SHGetSpecialFolder API 関数を使用して、そのような特別なフォルダーのアドレスを取得できます。

ダウンロードが完了すると、更新の準備ができていることをユーザーに知らせるダイアログ ボックスが表示されます。ユーザーが更新に同意する場合、昇格された権限で (管理者として) アップデーター プロセスを実行できます。アップデーター プロセスは、インストール パス内の既存のファイルを、ユーザーの一時フォルダーに既にダウンロードされているファイルと置き換えることができます。アップデーターを管理者として実行するには、ShellExecuteを使用できます。

ShellExecute(0,'runas','notepad.exe',nil,nil,SW_SHOWNORMAL);

更新が完了すると、アップデータ プロセスでアプリを再起動できます。

于 2010-03-05T16:33:15.153 に答える
1

または、ユーザーがランチャー アプリを実行できるようにすることもできます。

  1. アプリケーションは、LOCALAPPPATH\ フォルダーを使用して、メイン アプリケーションのキャッシュを格納します。
  2. Launcher は、キャッシュされたファイルよりも新しいバージョンのファイルがインターネットにあるかどうかを確認します。
  3. Launcher は、キャッシュされたアプリケーションを LOCALAPPPATH で起動します
于 2010-03-05T15:31:09.940 に答える
0
  1. インストーラーが管理者の下で実行されていない場合 - 更新をインストールするための追加の権限は必要ありません。

  2. インストーラーが管理者の下で実行された場合、Task Sheduler でタスクを作成できます。たとえば、このタスクを週に 1 回、このアカウント (管理者) で最高の特権で実行します。タスクはアップデーターになります。単純。

于 2010-06-15T00:35:22.367 に答える