9

commonappdata (すべてのユーザー) がシステム全体のアプリケーション設定を保持できることはわかっていますが、Vista/7 では昇格されていないユーザーはそのディレクトリに書き込むことができません。

ユーザー間で共有され、管理者以外のユーザーが書き込めるフォルダーはありますか?

これが必要な理由は次のとおりです。私のアプリは、昇格された権限を持つ Inno Setup インストーラーによって PF ディレクトリにインストールされます。次に、実際の管理者以外のユーザーがプログラムを実行すると、昇格されていない別の Inno Setup インストーラーを使用して、その設定がユーザーの AppData ディレクトリにコピーされます。プログラムをアンインストールすると (管理者権限を持つシステム全体のインストーラーによって開始されます)、各ユーザーの AppData ディレクトリからプログラムのファイルをアンインストールしたいと考えています。

1. Windows ユーザーのリストを取得し、AppData ディレクトリを反復処理する (複雑すぎるようです) 2. アンインストーラーへのパスを上記の共通ユーザー データ ディレクトリに保存します。

何か案は?

ありがとう!

4

4 に答える 4

4

WindowsXPの「共有ドキュメント」ディレクトリ

C:\Documents and Settings\All Users\Documents

または、

%ALLUSERSPROFILE%\Documents

Vista/7の対応するディレクトリ

C:\Users\Public

または、

%PUBLIC%\Documents

しかし、あなたが本当に探しているのは、(legacy )のKNOWNFOLDERID値です。SHGetFolderPath関数は、パスを取得できます。FOLDERID_PublicDocumentsCSIDL_COMMON_DOCUMENTS

または、より簡単なVBScriptの代替手段ですが、これがOSバージョン間でどれほど信頼できるかはわかりません。

Const CSIDL_COMMON_DOCUMENTS = &h2e 
Set oShell = CreateObject("Shell.Application")
Wscript.Echo oShell.Namespace(CSIDL_COMMON_DOCUMENTS).Self.Path

NameSpaceはその特定の定数を受け入れないと思います。COMMONAPPDATA = &H23したがって、その親を取得して使用できる可能性があります。しかし、それはあまりクリーンでも国際化されていません。

Wscript.Echo oShell.NameSpace(&h23).ParentFolder.Self.Path & "\Documents"

ただし、Inno Setupを使用しているので、実際には{commondocs} Shell Folder Constantを使用して、自分で簡単に使用できるようにする必要があります。

于 2011-10-23T02:28:02.923 に答える
3

ユーザーはドキュメント フォルダを所有しています。ユーザーへの可視性のために、そこに何かを置いた場合、ファイルが別のプログラムでコピー、移動、削除、または編集されることを期待してください。

インストーラーの共通アプリケーション データ (CSIDL_COMMON_APPDATA または FOLDERID_ProgramData) の下にフォルダーを作成し、すべてのユーザーがアクセスできるようにするセキュリティ記述子を作成することをお勧めします。

例えば

[Dirs]
Name: "{commonappdata}\productname";Permissions:everyone-modify;
于 2011-10-23T20:20:30.747 に答える
1

C:\Users\Public\ の下にあるものは、必要なものに適していますか?

于 2010-12-21T05:20:27.437 に答える
0

解決策 1 は、私にはかなり合理的に見えます。したがって、すべてのユーザーが自分のインストールのみを制御し、中央の共有インストールを制御します。

解決策 2 では、適切に定義された場所に書き込み許可フォルダーを作成して、インストーラーが認識できるようにするか、同じ目的でレジストリ キーを使用します。ただし、他のユーザーのアンインストール パスが改ざんされる可能性があるため、セキュリティ ホールが発生する可能性があることに注意してください。

于 2010-12-19T18:03:39.037 に答える