12

現在 HKEY_LOCAL_MACHINE に保存されているいくつかのプログラム設定があります。Vista とロックダウンされたユーザーのため、一部のユーザーは HKEY_LOCAL_MACHINE へのアクセス許可を持っておらず、それらの値は実際には HKEY_LOCAL_USER にも属していません (すべてのユーザーで同じである必要があります)。これらを保存するための最良の代替場所は何ですか?

設定の大部分はすでに DB に保存されていますが、プログラムが DB に接続する前に知っておく必要があるものもあります。理想的には、どのオペレーティング システムが実行されているかを確認する必要なく、これを実装する方法が気に入っています。

これは、Delphi で記述されたデスクトップ アプリ用です。

4

10 に答える 10

33

あなたは置くべきです:

  • HKEY_CURRENT_USER レジストリCSIDL_APPDATAまたはCSIDL_LOCAL_APPDATAフォルダー内の個人設定 (ウィンドウの位置や細かい設定など) 。
  • 重要なアプリケーション設定 (ユーザーが変更してはならない固定パスなど)HKEY_LOCAL_MACHINEは、レジストリまたはアプリケーションのフォルダーの下にあります。管理者権限が利用可能なインストール時に設定します。
  • CSIDL_COMMON_APPDATAフォルダー内の共有データ (単純なデータベースのように、すべてのユーザーが読み書きする必要があるデータ) 。

フォルダーの場所を見つけるには、SHGetFolderPathを使用しCSIDL_*ます。

必要に応じて、指定された 3 つのオプションすべてを一度に実装したい場合があります。それは何も悪いことではありません。

于 2008-11-13T01:30:38.900 に答える
13

私が知らないそれらをレジストリに配置するのに適した場所かもしれませんが、 C:\Documents and Settings\All Users\Application Data\yourApp にiniファイルを追加するだけではどうですか

于 2008-11-12T20:43:44.657 に答える
2

1つの例外を除いて、 @uliが言ったこと。

決して変更しないか、管理者のみが変更する必要がある設定は、改ざんを防ぐために、アプリケーションと同じフォルダーに保存する必要があります。

データベースの接続情報は、管理者の介入なしに変更すべきではないように思えます。したがって、この場合、アプリケーションのフォルダーは問題ない可能性があります。

于 2008-11-12T20:54:08.753 に答える
1

HKEY_LOCAL_USERについておっしゃいましたが、レジストリのトップレベルには表示されません。HKEY_CURRENT_USERを意味しているに違いないと思います。

ユーザー設定をHKEY_CURRENT_USER/Software/my-programの下に置きます。これはVistaでも問題なく動作することがわかりました。

ただし、HKEY_CURRENT_USERで不要なすべてのユーザーに適用される設定があると言うので、次のいずれかを試してみてください。

HKEY_USERS / .DEFAULT / Software / your-program

また

HKEY_CURRENT_CONFIG / Software / your-program

どちらの場所も使用していないので、Vistaで動作するかどうかはわかりませんが、一部のソフトウェアベンダーがそこにレジストリエントリを追加しているようです。

于 2008-11-13T01:06:38.103 に答える
1

%APPDATA% または %LOCALAPPDATA% にデータを保存します

于 2008-11-13T01:23:31.317 に答える
1

Re using ini files - beware that there seems to be a 2048 byte limit on items.

I've come unstuck because of this - encoded licence info hovering around the (then unknown) limit & something that always seemed to work breaking 'mysteriously' when they go over...

于 2012-12-04T05:52:27.653 に答える
1

設定が本当にすべてのユーザー向けかどうかを自問してください。本当にすべてのユーザー向けですか

この質問について慎重に考えてください。

ソフトウェアは、Windows XP で標準ユーザーとしてどのように実行されましたか?

  • ソフトウェアがクラッシュしただけですか?
  • オプションの構成が無効になっていませんか?
  • 管理者として実行する必要があり、拒否した場合はサポートしないことを顧客に伝えましたか?

ソフトウェアが絶対に管理者である必要がある場合は、管理者として実行する必要があることを示すマニフェストを実行可能ファイルに追加するだけです。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
   <assemblyIdentity 
      version="1.0.0.0"
      processorArchitecture="X86"
      name="IsUserAdmin"
      type="win32"/> 

   <description>Description of your application</description> 

   <!-- Identify the application security requirements. -->
   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
      <security>
         <requestedPrivileges>
                <requestedExecutionLevel
               level="requireAdministrator"
               uiAccess="false"/>
         </requestedPrivileges>
      </security>
   </trustInfo>
</assembly>

さきほど、あなたは管理者です。


しかし、あなたが本当に管理者である必要はないと思います。ローカル マシンの設定が必要になるのは、複数のログインまたはセッションからユーザーがソフトウェアを使用する場合のみです。それが本当にすべてのユーザーに適用されるものである場合、インストール プログラムはそれを設定するべきではありませんか?

ここでも同じ質問がありました。監視システムでは、ソフトウェアが使用するキャプチャ デバイスを構成する必要があります。すべての監視オペレーターが同じキャプチャ デバイスを使用すると言えるので、1 人がそれを選択すると、その設定はすべてのオペレーターに適用されます。しかし、実際にはそうではありません。キャプチャ デバイスは 1 つしかない可能性があり、それを使用しています。複数ある場合、ユーザーは単に別のデバイスを選択できます。


しかし、これを処理するにはいくつかの方法があります

i) 設定をレジストリに保存し、インストール プログラムでキーに ACL を設定して、すべてのユーザーにフル コントロールを付与します。

ii) 設定を

%APPDATA%\Surveillance\settings.ini

ファイル。インストール プログラムで設定ファイルを作成し、そのファイルに ACL を作成して、すべてのユーザーがフル コントロールを持つことができるようにします。

iii) 上記のレジストリ キーまたは ini ファイルに設定を保存し、使用します。

UAC Shield を保存/ OK /適用ボタンに追加します。ユーザーがボタンを押すと、( RunAsAdminを使用して) 管理者特権でアプリを再起動し、変更対象を示すコマンド ライン パラメーターを渡します。

iv) 3 と同じことを行いますが、値を編集するために使用される画面に入る前に行います。

v) 4 と同じことを行いますが、最初は値を読み取り専用にし、変更したい場合は昇格させる必要があります。

vi) ユーザーが標準ユーザーとして実行している場合はオプションを無効にし、オプションを変更する場合は、実行可能ファイルを右クリックして選択します。

管理者として実行


これが、ユーザーが好きなときに変更できるオプションである場合 (Windows XP で実行していて、ユーザーが管理者である場合)、ユーザーが値を自由に編集できることは許容されるようです。

この場合、以前は許可されていたように、ユーザーにサーバーの名前を入力させることができます。ユーザーが HKLM への書き込み権限を持っている場合は、そこにオプションを保存します。それ以外の場合は、HKCU に保存します。使用するサーバーを読み取るときは、HKCU から開始し、HKCU 値がない場合は HKLM に移動します。

于 2009-05-14T18:33:59.737 に答える
0

私はここですべての答えを読み、他の場所に詰め込みます、そして答えはそうです...レジストリを使用しないでください!これは本当に、すべてのユーザーに適用されるプログラム構成データを使用してMicrosoftが実行することを望んでいるのでしょうか。

于 2009-11-17T22:15:28.503 に答える
0

グループ ポリシーを介してレジストリ設定をプッシュするために使用できる .msi ファイルを作成できますか?

于 2008-11-12T20:44:32.893 に答える
0

昔ながらの INI ファイルが常にあります。それらは、レジストリ設定よりも移植性があります。もう 1 つのオプションは、XML ファイルです。

ただし、それらを Program Files ディレクトリに保存しないでください。Vista はそれを好まないでしょう。

于 2008-11-13T14:17:43.010 に答える