[英]Accessing folder information about clickonce application
這是問題所在:
我有兩個應用程序。 其中一個是我無法訪問的clickonce應用程序,另一個是我正在設計的ac#程序。 我需要一種通過開始菜單中的.appref-ms
文件或從該文件中找到的令牌ID /名稱來跟蹤應用程序安裝位置的應用程序文件夾的方法。
這可能嗎? 是否可以查詢clickonce商店以獲取應用程序列表以及它們的安裝位置? 我發現的所有內容都涉及打開過程列表並轉到過程映像位置,但是如果程序未運行,則無法實現。
ClickOnce將數據存儲在Windows注冊表項中: HKEY_CURRENT_USER\\Software\\Classes\\Software\\Microsoft\\Windows\\CurrentVersion\\Deployment
帶有應用程序列表的注冊表項: HKEY_CURRENT_USER\\Software\\Classes\\Software\\Microsoft\\Windows\\CurrentVersion\\Deployment\\SideBySide\\2.0\\StateManager\\Applications
我不知道查詢ClickOnce商店的方法。
但是正如@VojtěchDohnal所說。 所有ClickOnce應用程序將存儲在C:\\Users\\xxxx\\AppData\\Local\\Apps\\2.0
我們可以想象一個解決方案,該解決方案將為每個用戶列出樹中的所有可執行文件,並僅保存最新版本。
這是一個示例代碼片段(單個用戶):
var exes = Directory.EnumerateFiles(@"C:\Users\<user>\AppData\Local\Apps\2.0", "*.exe",
SearchOption.AllDirectories);
var apps = new Dictionary<String, Tuple<String, Version>>();
foreach (var file in exes)
{
var fileName = Path.GetFileName(file);
Version v = null;
Version.TryParse(FileVersionInfo.GetVersionInfo(file).FileVersion, out v);
if (fileName == null || v == null) continue;
if (!apps.ContainsKey(fileName))
{
apps.Add(fileName, new Tuple<string, Version>(file, v));
}
else if (v > apps[fileName].Item2)
{
apps[fileName] = new Tuple<string, Version>(file, v);
}
}
您會在apps字典中找到所有應用程序名稱作為鍵,並以值的形式找到一個Tuple,其中包含可執行文件及其版本的完整路徑。
沒有找到獲取信息的另一種方法,但我希望它能勝任
在我的計算機上嘗試過,似乎可以正常工作
如果知道您的應用程序名稱,則可以通過這種方式獲取上次安裝版本的路徑。
如果不是,但您知道.appref-ms
在哪里,則必須將其打開,獲取應用程序清單(由ClickOnce發布的.application
文件),並從assemblyIdentity
節點獲取可執行文件名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.