2016-05-17 7 views
1

私は通常、アプリケーション自身のフォルダに保存されたINIファイルと私のDelphiアプリケーションを記述します。(デルファイ7)

ConfigFile:= ChangeFileExt(ParamStr(0), '.ini'); 
IniFile:= TIniFile.Create(ConfigFile); 

try 
    with IniFile do 
    begin 
    // etc 

しかし、ある特定のアプリケーション、私が書いています私はセットアップウィザード(Inno)を使用し、ユーザーにProgram Files(x86)\ MyProgにアプリケーションをインストールする機会を与えたいと考えています。

私にとって、WindowsはINIファイルをインストールディレクトリに保存するのではなく、「どこか他の場所に」保存するということです。

コントロールパネルからアプリケーションをアンインストールすると、Program Files(x86)フォルダ(フォルダを含む)からすべてのアイテムが正常に削除されますが、多くのプログラムと共通です。再インストールされた場合、復元されました。だから彼らはどこかに格納する必要がありますコントロールパネル|アンインストールは削除されません。

私の質問はどこですか?

ありがとう、 ジョン。

+0

https://technet.microsoft.com/en-us /magazine/2007.06.uac.aspx) –

+3

あなたのアプリケーションからProgram Filesに書き込むことによってWindowsのガイドラインに違反しています。それはVistaがリリースされて以来(実際はXPだが、Vistaまで強制していない)、verbotenされている。プログラムファイルへの書き込みは、別のフォルダに仮想化されます。 15歳の開発ツールを使用することを選択した場合でも、現代版のOSに追いつくためにソフトウェアを調整する必要があります。 –

+3

11年前にファイルを探して、Vistaで導入された変更について学びません。その後、アプリケーションマニフェストを追加し、仮想化を停止し、ファイルをユーザープロファイルの下に保存します。 –

答えて

0

Program Filesフォルダの下にファイルを書き込むことは、管理者以外のユーザーによって禁止されています。管理者以外のユーザーとして実行中のアプリケーションがファイルを書き込もうとしたときに、アプリケーションにUACマニフェストがない場合、WindowsはProgram Filesフォルダを保護し、ユーザープロファイル内のVirtualStoreフォルダへのすべてのアクセスを自動的にリダイレクトします。この場合

Common file and registry virtualization issues in Windows Vista or in Windows 7

Windows 7 Application Compatibility Issues …Demystified !!!

このファイルにあなたのINIを書くとき、:

C:\Program Files (x86)\MyProg\MyProg.ini 

それは実際には、代わりにこのファイルに書き込まれます。

%USERPROFILE%\AppData\Local\VirtualStore\Program Files (x86)\MyProg\MyProg.ini 

INを保存するようにアプリを変更する必要があります

%LOCALAPPDATA%\MyProg\MyProg.ini 

または:私のような、より適切な場所にファイル([UACフォルダ仮想]

%PROGRAMDATA%\MyProg\MyProg.ini 

Where Should I Store my Data and Configuration Files if I Target Multiple OS Versions?

+1

しかし、上記のように、iniファイルを置く場所を変更してください。 –

+0

@GerryColl:はい、*正しい*解決策は、アプリケーションがUACでうまく動作するように動作する方法を変更することです。 'Program Files'リダイレクトは、ファイルが属していない場所にファイルを書き込む悪い記述コードからシステムを保護することです。この場合、ファイルは '%LOCALAPPDATA%\ MyProg \ MyProg.ini'など、ユーザーのプロファイルに属します。しかしOPは質問しませんでした*ファイルがどこか他の場所に書かれているのはなぜですか?OPは*ファイルの書き込み先を尋ねました*。私は私の答えで両方を扱った。 –

+0

私はUACマニフェストを追加しようとしましたが、プログラムはアプリケーションに適していないと思われる実行許可を求めます。 Startupフォルダから自動的に実行できるようにする必要があります。 私は自分のプログラムが「ポータブル」であることも好きです。なぜなら、通常は同じフォルダにINIを保存するのが好きなのです。 MyProgがProgram Filesにインストールされている場合、INIがMyDocuments \ MyProg \ MyProg.iniに保存されるような妥協を少ししました。それ以外の場合は、EXEと共に保存されます。 – vwlowen