2

基本的に、ユーザーのコンピューターにインストールされているアプリケーションがあります。

ユーザーは Windows 7 を使用しています。ユーザーには管理者アクセス権が付与されていません。ただし、アプリケーションは、ファイルを独自の Program Files ディレクトリに保存できる必要があります。

私が行きたかった道は次のとおりです。

  1. さまざまなバイナリ (Web サービス) をダウンロードします。
  2. 一時フォルダー内のファイルにバイナリーを書き込みます。
  3. コンソール アプリを起動します。(コンソールアプリはメインアプリがシャットダウンするのを待ちます)
  4. コンソール アプリは、一時ファイルを Program Files ディレクトリにコピーします。
  5. コンソール アプリは、メイン アプリを再起動します。
  6. コンソール アプリがシャットダウンします。

問題は、Windows 7 では、管理者として実行されていないアプリケーションが Program Files ディレクトリに書き込むことを許可していないことと、その理由 (セキュリティのため) を理解していますが、このアプリを自分で作成しているため、自分でマシンにインストールしていることです。 、ポップアップボックスでアプリを管理者として実行するように要求せずに、アプリが存在するディレクトリに書き込みできるようにする方法はありますか (相対パスを使用するため、プラットフォームに依存しません)。アプリを常に管理者として実行するように署名することはできませんか?

実際、メイン アプリケーションを管理者アクセスで実行する必要さえありません。これらの一時ファイルを永続ファイルとしてコピーできるようにするには、コンソール アプリ (一時ファイルをコピーするアプリ) が必要です。


更新: はい、これは自動更新アプリケーション用です。私は ClickOnce などについて考えましたが、主に更新を静かに、少しずつ行う必要があるため、独自の内部更新を作成するように導く追加の要件があります。場合によっては (更新された部分に応じて) アプリケーションをシャットダウンし、ファイルを移動して再起動する必要があります。また、アプリケーションが単にファイルを移動して実行を継続する必要がある場合もあります。

ClickOnce は私の状況では機能しませんでした。私たちの組織は、将来のニーズに合わせてカスタマイズできるように社内で何かを探していました。

4

3 に答える 3

1

コメントがすでに指摘しているように、Windows (Vista+) の最近のバージョン、UAC が有効 (デフォルト)、および管理者以外のユーザーがいる場合、ProgramFiles にアクセスできません。

更新された質問は、アプリケーション (少なくとも一部) を更新する必要があり、再起動が必要になる可能性があることを示しています。モジュールを更新する独自の方法を作成しました。

私の提案は次のとおりです。ProgramFilesに書き込まないでください

アプリケーションをユーザー プロファイルに完全にインストールするか、分割してください。

非常に少ない実行可能ファイルを作成しようと思います:

  • アセンブリがロックされないようにシャドーイングを設定する

  • 書き込み可能な場所 (ProgramData またはユーザー プロファイル) でアセンブリを検索し、それを読み込みます。

  • そこからアプリを実行します

更新の場合は、アセンブリを上書きし (シャドーイングされ、適切な場所に保存されているため)、必要に応じてプログラムを停止するか、ユーザーに再起動/再起動メカニズムの実装を依頼します。これには管理者権限は必要ありません。

于 2011-05-16T17:09:01.910 に答える
0

1 つの解決策は、インストール中にインストール フォルダーのアクセス許可を変更することです。

エコー y| cacls /E /T /P ユーザー:F

于 2011-05-16T15:51:51.797 に答える
0

UAC がどのように機能するかを理解するには、最初に app の代わりに PROCESS という用語を使用して、これを読んでください。

  • プロセスの権利は、プロセスが開始する前に決定されます
  • 別のプロセスから生成されたすべてのプロセスは、そのセキュリティを継承するか、次のいずれかを行います。
    • 昇格を求める

これから、そのステップ 3 を推測できます。

3. Launch a console app. (Console App waits for the main app to shutdown)

最初に実行されたプロセス (アプリ) の権限を継承します。

ある時点で、昇格を要求する必要があります。それがアプリの実行前またはサブプロセスの実行前である場合、それはあなたの選択です。

これを行うための最もユーザー フレンドリな方法は、最初の起動時またはインストール時に一度フォルダーのアクセス許可を変更することです。これは、毎回ユーザーを悩ませない方法です。ただし、一部の UAC は、ある時点で確実にユーザーに表示されます。

于 2011-05-16T15:53:10.870 に答える