2012-04-25 2 views
3

filepicker로 선택한 파일을 현재 실행중인 metro 스타일 앱의 installdir에 복사하는 방법이 있습니까? 나는 함께 InstallationFolder를 얻기 위해 노력 :파일을 metro-style-app의 설치 디렉토리에 복사

Windows.ApplicationModel.Package package = Windows.ApplicationModel.Package.Current; 
Windows.Storage.StorageFolder installedLocation = package.InstalledLocation; 

그러나 InstalledLocation를 가져 오는 동안 난 항상 다음과 같은 오류가 발생합니다 :

Error HRESULT E_FAIL has been returned from a call to a COM component.

디버깅이 아마 문제가 응용 프로그램/스토어에서 설치하지 ? 이 예외를 수정하는 방법?

파일의 복사본은 Windows.Storage.CopyAsync(IStroageFolder, ...)이어야합니다. 설치 위치는 유형이 StorageFolder입니다. 그것이 허용된다면 누군가는 약간의 경험을 가지고 있습니까? 보안 예외처럼?

+4

메트로 앱은 고립 된 저장소를 사용해야합니다. –

답변

2

InstalledLocation은 읽기 전용이지만 응용 프로그램의 데이터 저장소 폴더 (ApplicationData.Current.LocalFolder)에 쓸 수 있습니다.

이 작동 :

var fop = new FileOpenPicker(); 
fop.FileTypeFilter.Add(".txt"); 
StorageFile file = await fop.PickSingleFileAsync(); 
if (file != null) 
    await file.CopyAsync(ApplicationData.Current.LocalFolder); 

또한 당신의 응용 프로그램 매니페스트에서 라이브러리 액세스 기능을 확인해야 할 수도 있습니다.

+0

Thx4ur 답변. 불행하게도 나는 InstalledLocation에 대한 접근 권한을 필요로하지만 마치 메트로에서 할 수없는 것처럼 보인다. 어쨌든이 질문을 끝내라는 대답을 받아 들일 것입니다. –

+0

호기심에서 벗어남 - 바이너리/자산에 대한 쓰기 권한이 필요한 이유가 무엇입니까? –

+1

MEF를 사용하고 있습니다. Metro에서는 외부 휴대용 dll을로드 할 수 없습니다. 그러나 installDirectory에있는 휴대용 dll을로드 할 수 있습니다. 현재 응용 프로그램 bulld 동안 이러한 dll을 복사했습니다. 하지만 핵심 애플 리케이션에서 선택할 수있는 사용자의 꿈, dll을로드하고 자신의 dll 등을 추가 할 수도 있습니다. FilePicker -> dll 선택 -> installedLocation에 복사 -> dll/addin with MEF . –

관련 문제