Windows Vista と XP の両方で動作するインストーラーを (.vdproj を作成して) 作成しようとしています。私が見つけた唯一のことは、Vista で実行しようとすると、インストーラーに含まれるファイルがユーザー グループの読み取り専用アクセス許可でインストールされることです。アプリケーションはこれらのファイルから読み書きする必要があるため、これは問題です。私がそれを機能させることができた唯一の方法は、「管理者として実行」するか、実際に権限を変更することです。これらのファイルを誰でも書き込みできるようにする方法を知っている人はいますか? ありがとう。
2 に答える
Program Files フォルダーとその内容は、標準ユーザーに対してのみ読み取り可能です。これは仕様によるもので、Windows XP でも同様です。 Windows XP では、非常に多くの人が常に管理者権限で実行しているため、それを回避することができます。アプリをビジネス環境に配布したい場合、すぐに XP でも動作しないことがわかります。
解決策は、標準ユーザーが書き込みアクセスを必要とする場合、プログラムの実行可能フォルダーにファイルを配置しないことです。代わりに、それらを Application Data フォルダーに入れます。ほとんどの XP マシンでは、
C:\Documents And Settings\All Users\Application Data\Your Appにあります。
ただし、常にそうであるとは限らず、いずれにせよ Vista では少し異なるため、プログラミング環境によって提供されるメカニズムを介してそのパスを取得するようにしてください。.Net では、関数を使用できますEnvironment.GetFolderPath()
。
ジョエルの答えに詳細を追加するには:
Win2K および XP では、CSIDL_APPDATA をユーザーごとのローミングに使用する必要があります。Vista では、これは FOLDERID_RoamingAppData です。
Win2K および XP では、CSIDL_LOCAL_APPDATA をユーザーごとの非ローミングに使用する必要があります。Vista では、これは FOLDERID_LocalAppData です。
Win2K および XP では、CSIDL_COMMON_APPDATA をマシンごと、つまりアプリケーションのすべてのユーザーに使用する必要があります。Vista では、これは FOLDERID_ProgramData です。
注: この最後のフォルダーは通常、管理者以外の非パワー ユーザーに対して読み取り専用です。これに対する推奨される解決策は、アプリのインストール中に読み取り/書き込みサブフォルダーを作成することです。
編集: マネージド コードを使用して特定のマシンでこれらの定数の実際の場所を取得するには、ここで定義された定数を使用してSystem.Environment.GetFolderPathを試してください。別の便利なリンクはこちらです。