2012-04-25 3 views
3

Есть ли способ скопировать файл (выбранный с помощью filepicker) в 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, ...). InstalledLocation имеет тип StorageFolder. У кого-то есть некоторый опыт, если это разрешено или я получу sth. как исключение безопасности?

+4

Это не возможно, приложения Metro должны использовать изолированное хранилище. –

ответ

2

УстановленоОпределение доступно только для чтения, но вы можете записать в папку хранения данных приложения (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

Ответ на вопрос. К сожалению, мне нужно написать доступ к InstalledLocation, но похоже, что это невозможно сделать в метро. В любом случае я приму свой ответ, чтобы закрыть этот вопрос. –

+0

Из любопытства - зачем вам нужно писать доступ к вашим двоичным файлам/активам? –

+1

Я использую MEF. Загрузка внешних портативных DLL невозможна в Metro. Но можно загрузить переносные dll, которые находятся в каталоге installDirectory. В настоящее время я должен скопировать эти dll при запуске приложения. Но я мечтаю о пользователе, который может выбрать в основном приложении, какой DLL он хочет загрузить, а также добавить собственные dll и т. Д. Это было бы возможно с помощью Filepicker -> select dll -> copy to installedLocation -> Загрузить dll/addin с помощью MEF , –

Смежные вопросы