2012-04-25 43 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, ...)。 InstalledLocation來自類型StorageFolder。是否有人有一些經驗,如果它被允許或我會得到某事。像安全異常?

+4

這是不可能的,Metro應用程序必須使用獨立存儲。 – 2012-04-25 12:17:49

回答

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,但它似乎不能在地鐵中完成。無論如何,我會接受你的答案來關閉這個問題。 – 2012-04-26 05:56:10

+0

出於好奇 - 爲什麼你需要寫入你的二進制文件/資產? – 2012-04-26 13:55:11

+1

我正在使用MEF。在Metro中無法加載外部便攜式dll。但是可以加載位於installDirectory中的便攜式dll。目前我必須複製這些DLL,同時建立應用程序。但我夢想有一個用戶可以在覈心應用程序中選擇,他想要加載哪個dll,還可以添加自己的dll等。這可以通過Filepicker - >選擇dll - >複製到installedLocation - >使用MEF加載dll/addin 。 – 2012-04-27 08:04:25

相關問題