File.applicationDirectory issue in Windows XP

얼마전 AIR로 간단한 어플리케이션을 하나 만들어야 해서, AIR 인 액션 책을 보면서 작업을 하는데, File.applicationDirectory를 통해서 Program Files 폴더 내에 텍스트 파일을 생성하는 것이 도저히 안되더군요. 시간도 없고 해서 그냥 내 문서에 저장하도록 만들게 됐죠.

나중에 검색을 해보니 윈도우 비스타에서는 File.applicationDirectory로의 접근이 안되니, 다른 폴더에 저장하라고 하는군요.

Recently, I had to create a simple AIR application, and I developed it refering a book, AIR in Action. But I couldn’t create a text file on Program Files folder via File.applicationDirectory. I changed the target folder to My Documents for I had no time.

Later I googled and found this. In Windows Vista, access to Program Files folder fails for the security issue.

最近、簡単な AIR アプリケーションを作ることになって、AIR in Action本を参考にして、開発したんです。だが、File.applicationDirectoryを通じてProgram Filesフォルダーの中にテキストファイルを生成することが出来なかったんです。時間がなくて、My Documentフォルダーを利用することにしたけど。。。

後でググって見ると、Windows Vistaでは File.applicationDirectoryへのアクセスが出来ないから、他のフォルダー使用するって。

http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=4&postId=9384

그런데 이거 윈도우 XP도 비스타와 마찬가지로 안됩니다.
I think the problem is reproduced in Windows XP, too.
これはWindows XPでも同じのようです。

8 thoughts on “File.applicationDirectory issue in Windows XP”

  1. 어라 windows/system32는 접근이 되면서 program files 는 접근이 안된다니…
    아이러니 하네요 ㅋㅋㅋ
    형님이 물어봤을때 windows/system32 접근되면 다 될줄 알았더니
    그건 아닌가보군요.
    큰일날뻔했네요 ㄳㄳ

  2. 형님
    전 아래 코드로 패키징해서 테스트해봤는데 잘 되요.

    var file: File = new File( File.applicationDirectory.nativePath + File.separator + “test.txt” );

    var fs: FileStream = new FileStream();
    fs.open( file, FileMode.WRITE );
    fs.writeMultiByte( “test”, “ms949” );
    fs.close();

    그리고 프로그램 폴더는 applicationDirectory.parent 로는 참조가 안되는데

    var file: File = new File( new File( “c://Program Files/” ).nativePath + File.separator + “test.txt” );

    이렇게는 참조가 되네요.

    맥에서 테스트해보면 맥이랑 윈도우즈랑 다르게 설정하면 어떻게 되지 않을까 싶어요 ㅋ

  3. //woyaggo
    어 그런가… trace 찍어보면 분명히 프로그램 파일의 어플리케이션 설치 폴더내의 파일 경로가 잡히긴 하는데, 실제로 파일이 생성되거나 수정되진 않던데. 나중에 시간날 때 다시 테스트 해 봐야겠네.
    //지돌스타
    다시 테스트해서 재현이 되는지 확실히 해봐야 겠네요.

  4. var file:File = File.applicationDirectory.resolvePath("test.txt");

    이런식으로 접근하면, 아래와 같이 폴더 권한 체크하는 부분에서 에러가 발생하는 듯.
    SecurityManager$/checkPrivilegeForCaller()

    var file:File = File.documentsDirectory.resolvePath("test.txt");

    이런 식으로 resolvePath()를 사용해서 다른 시스템 폴더들에는 접근이 가능한데, 프로그램 파일 폴더는 윈도우에서 권한을 주지 않아서 접근하지 못하는 것 같은데… 그렇다면

    var file1: File = new File( File.applicationDirectory.nativePath + File.separator + "test.txt" );

    이것도 안되어야 하는거 아닌가? 당췌 MS의 잘못인지, 어도비의 잘못인지?

  5. http://blogs.adobe.com/simplicity/2008/06/dont_write_to_app_dir.html 에 관련 내용이 있네요.. 요약하면 Program Files 폴더에는 되도록이면 파일을 생성하거나 데이터를 쓰지 않는 게 좋다.. 만일 그럴 경우, 해당 파일이 애플리케이션 권한을 갖게 돼서 보안상 위험할 수 있다. 그래서 비스타에서도 금한다… 그리고 이럴 경우 애플리케이션 시그너쳐가 망가져서 암호화된 보안 영역을 사용할 수 없다… 앞으로 어도비에서도 이 부분은 아예 막아놓을 수도 있다.. 등의 내용이네요 ㅇㅇ

  6. 좋은 정보 감사합니다. 보안상 이유로 프로그램 폴더에 대한 쓰기 권한을 제한하는 것은 당연한 것이라고 생각은 드네요. 액트브X에서도 해당 폴더에 접근이 제한적으로 변경되었으니까요. 이런건 좀 누구나 알 수 있도록, 어도비에서 제대로 알려야 하는데, 그게 좀 아쉽네요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다