2010-11-29 47 views
5

Path.GetDirectoryName(FilePath)にファイルを保存するアプリケーションで作業しています。FilePath = Application.ExecutablePathには、ライセンスに関する情報が含まれています。 VSからプログラムを実行すると問題なく動作しますが、インストーラを作成してインストールして実行すると、プログラムはファイルが既に存在すると考えます。メッセージボックスに私のFilePathを表示するようにプログラムを変更し、File.Exists(FilePath)trueまたはfalseを返すかどうかを変更しました。だから私はその道を見て、隠しファイルとシステムファイルを表示したり、F5を何度も何度も何もしなかったりしました。ファイルは存在しませんが、File.Exists(FilePath)がtrueを返します。なぜこのようなことが起こるのか、どうすれば回避できますか?File.Existsが存在しないファイルに対してtrueを返す

私はWindows Vista、Visual Studio 2010、C#を使用しており、VSのセットアッププロジェクトでインストーラを作成しました。

編集:私のパスは次のとおりです。C:\プログラムファイル(x86の)\ヘリウム\のLicense.xml

これは私のコードの一部です:

 MessageBox.Show("LicenseFileName: " + LicenseFileName); // LicenseFileName: C:\Program Files (x86)\Helium\License.xml 
     System.Diagnostics.Process.Start(LicenseFileName);  // Nothing happens 
     MessageBox.Show("File.Exists(LicenseFileName): " + File.Exists(LicenseFileName)); // File.Exists(LicenseFileName): true 

ので、ファイルが存在するために使用する前に、私はすでにアプリケーションがインストールされていたことを言うのを忘れていました。私はコントロールパネルを使用してアンインストールしました。

+0

絶対パスか相対パスですか?私たちに実際の道を示すことも助けになるかもしれません。 – bblack

+2

ファイル名を指定して実行を試みてください。それは超隠されている可能性があります。また、Windows Vistaを使用しないことをお勧めします。 –

+2

あなたは文字通り 'FilePath = Application.ExecutablePath; File.Exists(FilePath);と言っていますか?より完全なコードサンプルが参考になります。 – Sorpigal

答えて

18

システムフォルダにインストールする場合、Windowsファイルの仮想化が開始され、ファイルのユーザーごとのコピーが作成される可能性があります。したがって、ファイルは%userprofile%\ AppData \ Local \ VirtualStoreフォルダのどこかに置かれます

+0

それはどこにあるのですか? – Juan

+0

ええ、私はその1つを追跡する前に一日中一杯を無駄にしました、私はそれも頼まなければならないと思います:) – skajfes

関連する問題