簡體   English   中英

訪問有關clickonce應用程序的文件夾信息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM