実行するためにSQLiteDBを必要とするアプリケーションがあります。私のNSISスクリプトでは、DBはユーザーのLocal / AppDataフォルダーにコピーされます。プログラムをインストールするユーザーが管理者ユーザーである場合、これは正常に機能します。
ただし、標準ユーザーがプログラムをインストールしようとすると、インストーラーは管理者パスワードを要求し(標準ユーザーはWindowsにプログラムをインストールできないため)、インストールしているユーザーは管理者に切り替えられ、DBがにインストールされます。実際のユーザーのAppDataフォルダーではなく、admins Local / AppDataフォルダー。
したがって、実際には、標準ユーザーがプログラムを実行しようとすると、DBが見つかりません。
この状況に対処する方法がわからず(ベストプラクティスがある場合)、それに答える質問が見つかりません。
インストーラーはDBをAllUsersなどのパブリックな場所にドロップし、最初の実行時にDBをそこから独自のAppDataフォルダーにコピーする必要がありますか?
allusersフォルダーの問題は、誰でもそのフォルダーを覗き込んだり、ファイルを削除したりできることだと私には思えます。
標準ユーザーはアプリケーションをインストールできます。$ LocalAppdata \ Programs \ MyApp(FOLDERID_UserProgramFiles)の下にプログラムをインストールし、の下にアンインストール情報を書き込みますHKCU
。NSISには、1つのインストーラーで両方のタイプのインストールモードをサポートする場合に役立つ特別なSHCTX
レジストリルート(によって制御されるSetShellVarContext
)があります。
ユーザーに常に管理者に昇格させる場合は、データベースのテンプレート/基本バージョンをAllUsers appdata(Vista +ではProgramDataと呼ばれます)(SetShellVarContext all
+ $AppData
)またはCommon ProgramFiles($COMMONFILES
)フォルダーに保存することをお勧めします。アプリケーションは、特定のユーザーの最初の実行時にコピーを作成します。これらの場所にあるファイルを削除できるのは管理者だけです。ほとんどのユーザーは読み取りアクセス権を持っていますが、ファイルにユーザー固有の情報が含まれていてはならないため、これは問題ではありません。
これらの推奨事項は、Windowsデスクトップアプリの認定要件または古いWindowsロゴ要件のドキュメントに記載されています。
10.3コンピューター上のユーザー間で共有する必要があるアプリデータは、ProgramData内に保存する必要があります
10.4特定のユーザー専用で、コンピューターの他のユーザーと共有されないアプリのデータは、Users \\ AppDataに保存する必要があります
10.6アプリは、「マシンごと」のインストールではなく、最初の実行時にユーザーデータを書き込む必要があります
アプリをインストールすると、データを保存する正しいユーザーの場所がありません。インストール後にマシンレベルでデフォルトの関連付け動作を変更しようとするアプリの試みは失敗します。代わりに、デフォルトはユーザーごとのレベルで要求する必要があります。これにより、複数のユーザーが互いのデフォルトを上書きするのを防ぐことができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加