2012-04-25 7 views
3

ファイルを(filepickerで選択した)ファイルを現在実行中のメトロスタイルアプリのinstalldirにコピーする方法はありますか?私はインストールフォルダを取得しようとしました:メトロスタイルアプリのインストールディレクトリにファイルをコピー

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です。許可されていれば誰か経験がありますか?セキュリティ例外のようなもの?

+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を使用しています。メトロではポータブルdllを読み込むことはできません。しかし、installDirectoryにあるポータブルdllをロードすることは可能です。現在、私はこれらのdllをコピーしている間に、アプリケーションをビルドしています。しかし、私は、コアアプリケーションで選択できるユーザーを夢見ています.DLLをロードしたい場合や自分のdllなどを追加することもできます。これは、FilePicker - > dllの選択 - > installedLocationへのコピー - > dll/addinのMEF 。 –

関連する問題