WinVista UACが有効なのにProgramFilesにアクセスできてしまう
こんにちは。
WindowsVista Home Premium SP2
Visual C++ 2008 Express Edition
上記の環境で作成したアプリで、不可解な事があるので質問させていただきます。
現在、C:\Program Filesの下の同一フォルダにインストールされている2つのプログラム間で、ファイルを介してデータのやり取りを行おうと考えております。
簡略化のため、最小限のファイル構成のみ書かせていただきます。
C:\Program Files
+ TargetApp ←インストール先フォルダ
+ TargetApp.exe ←データのやり取りの相手
+ MyApp.exe ←私が作ったアプリ
+ Test.ini ←データ受け渡しをするファイル
さて、ここでProgram Files\Test.iniをアプリからアクセスすると、通常ですとVistaのUAC機能により、本物のTest.iniにはアクセスできず、代わりにVirtualStore内の同名ファイルに飛ばされてしまう、という理解を私は現在しております。
たとえVirtualStoreに飛ばされても、2つのアプリがお互いに飛ばされれば、結果的に同じファイルをアクセスできるものと思っておりました。
ところが、やってみますと、私の作ったMyAppは、Program Files内の本物のTest.iniに直にアクセスしてしまうようなのです。
試しに、Program Files内とVirtualStore内のTest.iniの内容を、以下のように違うものにして、簡単なテストプログラム(TestApp.exe)を走らせてみました。
[Program Files\TargetApp\Test.ini]
This File is in 'Program Files'
[VirtualStore\Program Files\TargetApp\Test.ini]
This File is in 'VirturlStore'
[TestProgram]
// Tabは全角スペースに置き換えています
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
int cc;
if(argc < 2){
printf("ファイルを指定してください。\n");
return -1;
}
if(fopen_s(&fp, argv[1], "r")){
printf("ファイルが開けません。\n");
return -1;
}
while((cc = fgetc(fp)) != EOF){
printf("%c", cc);
}
fclose(fp);
return 0;
}
テストプログラムを実行
>TestApp "C:\Program Files\TargetApp\Test.ini"
This File is in 'Program Files'
このように、本物が見えてしまいます。
なお、テキストエディタでこのファイルを開くと、VirtualStoreの内容が見えますので、うっかりUACがOFFになっている等はないと思います。
Vistaの基本的な知識が抜けているだけだとは思うのですが。。。
VirtualStoreの残像拳の方にアクセスできるよう、ご教示を頂ければと思います。
よろしくお願いいたします。