Microsoft Store 版本 App 的資料儲存


這篇呢,主要是因為 Windows Live Writer 已經徹底不能用了,而當 Heresy 想把部落格撰寫的環境換到 Open Live Writer 的時候,發現透過 Microsoft Store 安裝的版本在要手動修改一些檔案、registry 資料的時候,都會出現沒辦法在一般的位置找到的狀況…

本想說都改用傳統安裝的版本就算了,不過因為也有點好奇,所以才花了點時間,研究一下到底是怎麼回事。這篇就是一些紀錄。


安裝路徑

Program Files

Windows 最典型的應用程式安裝路徑,以現在都是 x64 的電腦來說,基本上就是:

  • 64 位元的程式會安裝在:C:\Program Files
  • 32 位元的程式會安裝在:C:\Program Files (x86)

通常要找安裝好的程式,大多都會先到這邊來看。

使用者的 AppData

或許是因為 Windows 後來開始朝一台電腦多個使用者發展,所以安裝在這個傳統的路徑,其實會變成所有的使用者都看的到、都能存取。

所以,後來的應用程式安裝,有的就會安裝到使用者的個人資料夾中,路徑是:

  • C:\users\%USERNAME%\AppData\Local\Programs

不但是隱藏目錄,而且一般人也不太知道會在這。

像是 Visual Studio Code,預設就是安裝在這裡(參考)。

Microsoft Store App

至於透過 Microsoft Store 安裝的 App 呢?基本上會安裝在:

  • C:\Program Files\WindowsApps

不過,雖然知道了,但是其實沒什麼用。因為這個資料夾有特殊的權限保護,所以很難直接去存取他。而這邊其實也沒必要特別進去看。

而如果真的想到到實際的執行檔,則可以先把程式執行起來,然後透過工作管理員的「開啟檔案位置」這個功能,快速地開啟執行檔所在的資料夾。

而以 Open Live Writer 這種把 Win32 的應用程式包裝成 Microsoft App 的軟體來說,他的路徑會變得很複雜:

C:\Program Files\WindowsApps
\D5BA6BCD.OpenLiveWriter_0.6.2.0_x86__7g8mfyn71hpbp
\VFS\Users\ContainerAdministrator\AppData\Local
\OpenLiveWriter\app-0.6.2.0

這邊拆成四行是為了顯示方便,實際上它就只是連在一起的一個路徑…

考慮到裡面還有「ContainerAdministrator」這樣的字樣,微軟應該是透過容器的虛擬化技術,來執行這種 Win 32 App 的吧~

如果有需要修改應用程式執行的相容性設定,基本上就可以在這邊調整。


應用程式資料的儲存

至於應用程式儲存的資料會在哪呢?在 Windows 的來說,一般應用程式會儲存的資料應該可以分成:

  • 使用者可以自行決定要存在哪、或是設計成讓使用者好找到的資料
    • 例如 Word 存檔可以自己選擇要存在哪裡
    • 或者像是 Windows Live Writer 是把文章的檔案固定儲存在「我的文件」的「My Weblog Posts」資料夾下;Open Live Writer 則可以在應用程式中修改路徑
  • 程式內部使用的資訊、一般不想讓使用者直接存取
    • Windows Registry,使用者一般要用 regedit.exe
      來讀取、編輯
    • 其他檔案型的資料

第一大類的部分基本上不會受到使否是 Microsoft Store 的 App 的影響,所以這邊就不討論了。

而第二類呢,則就是這次要研究的目標。


傳統的應用程式

首先,這邊先對於一般的 Win32 應用程式來討論。

Registry

在 registry 的部分,一般的軟體大多會在 HKEY_CURRENT_USER\SOFTWARE\
下,建立出自己的目錄,然後在下面寫入資料;以 Open Live Writer 來說,他的資料就放在 HKEY_CURRENT_USER\SOFTWARE\OpenLiveWriter 下。

一般來說,只要執行 regedit,就可以在裡面找到對應的資料了。

檔案型資料

以檔案型的資料來說,現在的 Windows 應用程式,基本上大多會把不區分使用者的資料放在「C:\ProgramData」這個隱藏資料夾中。

而針對不同使用者的資料,在 Windows Vista 以後的系統,則會儲存在 C:\users\%USERNAME%\AppData\ 這個隱藏的資料夾下,做為不同使用者的資料隔離。

在這個資料夾下,一般會有下面三個資料夾:

  • Local(可以透過 %localappdata% 存取)
    • 僅存在這台電腦的設定資料,通常放在這個會是不能跨電腦同步的
  • LocalLow
    • Local 類似,但是權限不同;通常是保護模式或安全模式的應用程式會存取這裡
  • Roaming(可以透過 %appdata% 存取)
    • 可跟著 user profile 跨電腦同步的資料(參考
    • 沒理解錯應該是要有 AD Domain、有加入網域的狀況

而應用程式可以根據資料的性質不同,決定要儲存在哪裡。

以 Open Live Writer 來說,則是在 LocalRoaming 都有儲存資料;實際上,Open Live Writer 甚至是採取把程式放在「Local\OpenLiveWriter\app-0.6.2」這樣,個人覺得滿極端的作法。

而在「Roaming\OpenLiveWriter」,則會儲存部落格的 template、關鍵字等等理論上可以跨電腦同步的資料。


Microsoft Store App

至於從 Microsoft Store App 安裝的 App 呢?如果按照前面的方法去找,基本上都找不到對應的資料到底在哪…

在 Heresy 來看,這是因為微軟針對 Microsoft Store 的 App
的資料存取,採用了更嚴謹的隔離策略、將所有相關設定都獨立出來存放的關係;考慮到前面「ContainerAdministrator」,個人覺得微軟的做法應該是透過容器的虛擬化,在執行應用程式的時候才加載這邊的資料的。

這類的 App 基本上會把資料都儲存在 C:\users\%USERNAME%\AppData\Local\Packages
這個路徑下;裡面的資料夾,除了包含大量 Windows 預先安裝的套件,自己安裝的 App 大部分也都會再加上編碼,所以如果不用搜尋的,可能會很難找…

像是以 Open Live Writer 來說,他的資料夾名稱就是「D5BA6BCD.OpenLiveWriter_7g8mfyn71hpbp」,裡面應該會有下列的資料夾:

  • AC
  • AppData
  • LocalCache
  • LocalState
  • RoamingState
  • Settings
  • SystemAppData
  • TempState

檔案型資料

以 Open Live Writer 來說,本來會儲存在 C:\users\%USERNAME%\AppData\ 的資料,現在會在 LocalCache 這個目錄下。

以「blogtemplates」這個部落格範本的路徑來說,本來的路徑是:

C:\users\%USERNAME%\AppData\Roaming\OpenLiveWriter\blogtemplates

而如果是安裝 Microsoft Store 的版本,則會變成是:

C:\Users\%USERNAME%\AppData\Local\Packages
\D5BA6BCD.OpenLiveWriter_7g8mfyn71hpbp\LocalCache
\Roaming\OpenLiveWriter\blogtemplates

感覺埋的深了很多呢…不過瞭解了結構後,大致上都還是可以找到對應的位置的。

Registry

而 Registry 的部分呢,這邊也把他們的資料獨立出來了~他基本上是把 HKEY_CURRENT_USER 的資料,都放在 SystemAppData\Helium\User.dat 這個檔案裡面。

由於他是獨立的檔案,所以要編輯他,就得用比較特別的方法了;它的操作步驟是:

  1. 關閉要編輯 registry 的應用程式(這邊是 Open Live Writer)
  2. 執行 regedit
  3. 在左側點選「HKEY_LOCAL_MACHINE
  4. 點選「檔案」、「載入登錄區」
  5. 選取 SystemAppData\Helium\User.dat 這個檔案後按下「開啟」
  6. 這時候會詢問「機碼名稱」,可以自己取名,但是不能和既有的衝突;這邊就取名「OLW
  7. 完成之後,就會出現「HKEY_LOCAL_MACHINE\OLW」這個機碼了

之後,就可以在「HKEY_LOCAL_MACHINE\OLW\SOFTWARE」下,找到本來應該在「HKEY_CURRENT_USER\SOFTWARE\」的資料了~

而當編輯完了之後,則是要:

  1. 在左側選取「HKEY_LOCAL_MACHINE\OLW
  2. 點選「檔案」、「解除載入登錄區」

操作完之後,應該會看到剛剛冒出來的 OLW 的消失了。

這樣才能解除對於 User.dat 這個檔案的鎖定,也才能執行 Open Live Writer;否則,就算把 regedit 關掉,Open Live Writer 也還是因為 User.dat 這個檔案已經被讀取、鎖定,而無法執行的。


這篇大概就整理到這邊了~基本上,有的東西其實還是不是那麼確定,大部分的資訊基本上也不是從微軟官方的文件找到的,搞不好會有一些誤解、錯誤。

不過,針對 Open Live Writer 要修改資料的問題,大致上是都解決了,所以就先到此打住了。


參考:

對「Microsoft Store 版本 App 的資料儲存」的想法

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.