これは私がスーパーユーザーについて質問するのは初めてです(ただし、stack-overflow と superuser は頻繁に参照しています)。質問に間違いがあったり不明瞭な点があったりした場合はご容赦ください。必要に応じてエラーを修正したり明確にしたりします。
たとえば、MyApp というアプリケーションを開発し、メインの実行可能ファイルとそれに関連する依存関係 (フォルダーとファイル) を の専用のフォルダーにインストールするインストーラーを作成しましたC:\Program Files (x86)\MyAppFolder\
。
問題は、実行時にログなどのファイルを独自のディレクトリであるフォルダに作成することになっていることですMyAppFolder
。少し調べた後、管理者として実行されていないことが原因であることがわかりました (ちなみに私のユーザーは管理者です)。または、管理者のみが に書き込むことができるためだと\Program Files
思います。アプリケーションを管理者として実行すると、必要なファイルとフォルダに書き込むことができます。
しかし、理想的には、アプリは独自のフォルダーに書き込むことができるべきではないでしょうか? 管理者権限で実行されていない場合でも? ここで何が欠けているのでしょうか?
前もって感謝します。
答え1
Windows には「プログラム独自のフォルダー」という概念はありません。
存在する概念は「プログラムの現在のフォルダ」であり、デフォルトではプログラムが実行されたフォルダです。プログラムが持つ権限は、プログラムが配置されている場所からではなく、プログラムを起動したユーザー アカウントから取得されます。
つまり、プログラムが Program Files から実行される場合、デフォルトでは管理者としてではなく、自分のアカウントで実行されます。そのため、プログラムが配置されているフォルダーに書き込む権限がありません。
プログラムがファイルを保護されていないフォルダに書き込むのは理にかなっています。通常は、 内に独自のフォルダを作成します。 このフォルダはC:\Users\USERNAME\AppData\Local
環境変数 でも使用できます%LOCALAPPDATA%
が、任意の場所に作成できます。