2014/8/14
我已經把這個問題向微軟反映了。還在坐等答復。
answers.microsoft.com
2014/8/11
新的一個星期又來了,今天在windows 論壇上把我的問題發出來了。希望找到大神幫我解決。
發現一個情況,如果沒有更新windows update 很有可能爆出vclibs版本太低,不能安裝app等。但是更新了update 后,依舊顯示vclibs安裝不對。
2014/8/7
把系統破解了。
使用winstore,下載app錯誤碼變了。變成802460007和80070490
在事件查看里面還是有各種錯誤。
在windows 論壇上找了很久關于這些錯誤碼的解決方法,沒有一個是說到點子上的。這個修復metro app已經快讓我逼瘋了
2014/8/6
在開發win8的metro app卸載的時候,在公司測試發現有幾臺機子都沒有檢測出app。經過查看發現,其實metro app已經無法啟動了。所以目前的研究方向和目的就是如何修復win8 app。直到現在,在這個問題上已經研究了一個星期了,完全走向了死路,毫無頭緒。
還是先來總結一下現在研究到有用的內容吧
前提知識:
1.卸載app調用的是powershell 中的 remove-appxpackage
命令。在這里需要注意的是
- 該命令傳入的參數是app的key name
- 該命令卸載的app,是你啟動進程使用用戶所擁有的app。例如,當你不是管理員賬戶,你用管理員賬戶啟動powershell,那么卸載的不是當前用戶的app,是管理員的app
2.獲取app的命令是get-appxpackage
。這里有個小技巧,獲取后可能顯示很多app的詳細信息,你可以使用配適語句來讓結果更加明了。
-
get-appxpackage | select name
只會顯示所有app的名字 -
get-appxpackage | where name -like *winjs*
只會顯示名字和winjs匹配的app詳細信息
3.安裝app使用的命令是add-appxpackage
,也有兩個需要注意的地方。
-
add-appxpackage -path <string>
直接安裝appx文件 -
add-appxpackage -regiser <string> -disabledebelopmentmode
這個是修復win8 app的重要命令,需要傳入的是appxmainfest.xml文件路徑,讓系統可以重新注冊安裝app。也就是在沒有appx安裝包的時候,我們可以安裝app的方式,這應該是提供給開發者在開發app沒有在winstore上架的時候,安裝本app使用的。
4.這個appxmainfest.xml是個什么文件呢?
- 這個文件是應用部件清單聲明應用的標識、應用的功能以及用來進行部署和更新的信息。
5.那AppxBlockMap.xml和AppxSignature.p7x又是什么文件呢?
- 應用包塊映射文件 (AppxBlockMap.xml)塊映射文件列出包中包含的所有應用文件,以及操作系統用來驗證文件完整性和優化應用更新的相關加密哈希值。應用包數字簽名文件 (AppxSignature.p7x)應用包簽名可確保包及其內容在簽名之后未進行過更改。 如果簽名證書驗證為可信根證書頒發機構的證書,則該簽名還標識包的簽名者。包的簽名者通常是應用的發布者或作者。
6.metro app有3種開發模式
- 第一是C#,第二C++,第三Javascript。分別對應了不同的運行時,.net、vclibs、winjs,這三個運行時。如果缺少運行時,metro app是運行不起來的。也是就很多人發現,app目錄下有exe執行文件,但執行他卻不能啟動app,提示的就是缺少 app container。
好了。前提知識講完了,現在我們來一步一步研究如何修復這個win8 metro app。
總所周知,win8這個系統真的是非常爛。特別是在出現問題的時候,連網上google解決方案都沒有,真的是很惡心。沒辦法,只有一步一步嘗試咯。
目前最有效的一個。從注冊表,可以重注恢復和無關聯運行時的app,(pc設置,app商店,照相機,相冊&skydiver)。powershell執行。
((Get-ChildItem "HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\InboxApplications") | Get-ItemProperty).Path | Add-AppxPackage -Register -DisableDevelopmentMode
從文件夾,重注恢復運行時的方式。cmd執行
FOR /F %I IN ('dir "c:\Program Files\windowsapps\microsoft.vclibs*" /B') DO (call powershell -ExecutionPolicy Unrestricted Add-AppxPackage -DisableDevelopmentMode -Register 'c:\program files\windowsapps\%I\AppxManifest.xml')
FOR /F %I IN ('dir "c:\Program Files\windowsapps\microsoft.winjs*" /B') DO (call powershell -ExecutionPolicy Unrestricted Add-AppxPackage -DisableDevelopmentMode -Register 'c:\program files\windowsapps\%I\AppxManifest.xml')
以上兩種方法都可以引升到修復其他app。但是為產生許多其他的問題
在修復其他app的過程中,基本上會爆運行時找不到的問題。
在修復運行時過程中,又會爆app中的某些文件缺少的問題。
綜上,可以得知。重注或者安裝運行時的時候,系統會同時重注所有關聯這個運行時的app。同理,在重注app時,也會去重注與這app關聯的其他app,例如運行時。
好了,但不是我們之前不是修復了win store嗎,那我們直接把所有壞的app卸載了重新安裝一遍不就可以了。NO!現在才開始了噩夢。win store開始爆各式各樣的錯誤了。
下載安裝,app安裝一直處于pending狀態。
運行wsreset.exe,清理下載緩存。爆0x8007064A錯誤
將HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\Repository\Packages
改為SYSTEM擁有爆0x80070002錯誤
- 這個錯誤真的是要命,我已經花了一個星期的時間在這個錯誤上面了。網上所有的解決方法都是錯的呀。媽蛋! 這0002應該是文件缺失的錯誤,你如果不放棄。可以試一試以下幾種方式。
- 重啟windows update服務,并設置服務為自動。在CMD中輸入
net stop wuauserv net start wuauserv
。因為vclibs和winjs是由系統自動更新的,所以不一定系統自己就吧這個文件缺失更新上去了呢。 - 修復系統
sfc /scannow
DISM.exe /Online /Cleanup-image /Scanhealth
DISM.exe /Online /Cleanup-image /Restorehealths
- 修改ie設置 LAN settings - Uncheck the “Use a proxy server for your LAN” check box
- 在網上找到運行時的最新安裝包,安裝上去。
- 將好電腦的注冊表值復制注冊表到破電腦里面。看看有沒有效果。
相關位置有:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\<用戶的SID號>
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\Repository\Families
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\Repository\Packages
如果不能復制或者輸入到注冊表,試一試修改權限,將擁有用戶修改為自己,弄完以后再修改回去。 - 最有效的方法新建一個新用戶,系統會在新用戶登錄初始化的時候,安裝原裝的app(獲取預安裝app
Get-AppXProvisionedPackage
)。登陸后,metro app完美使用。但你必須將老用戶的東西都備份到新用戶這里來
好了到這里真的是走頭無路了。沒辦法完美的在原有用戶上恢復app了。研究了一個星期哭暈在廁所的節奏。