访问有关 clickonce 应用程序的文件夹信息
Accessing folder information about clickonce application
这是问题所在:
我有两个应用程序。其中一个是我无权访问的 clickonce 应用程序,另一个是我正在设计的 c# 程序。我需要一种方法来通过开始菜单中的 .appref-ms
文件或从该文件中找到的令牌 id/name 来追踪安装应用程序的应用程序文件夹。
这可能吗?有没有办法查询 clickonce 存储以获取应用程序列表及其安装位置?我找到的所有内容都是指打开进程列表并转到进程映像位置,但如果程序不是 运行.
,这是不可能的
我不知道查询 ClickOnce 存储的方法。
但正如@Vojtěch Dohnal 所说。所有 ClickOnce 应用程序都将存储在 C:\Users\xxxx\AppData\Local\Apps.0
中
我们可以想象一个解决方案,它会为每个用户列出树中的所有可执行文件,并且只保存最后的版本。
这是一个示例代码片段(单用户):
var exes = Directory.EnumerateFiles(@"C:\Users\<user>\AppData\Local\Apps.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);
}
}
您会在应用程序字典中找到所有应用程序名称作为键,作为值的元组包含可执行文件的完整路径及其版本。
没有找到另一种获取信息的方法,但我希望它能完成任务
在我的电脑上试过,似乎工作正常
如果您知道您的应用程序名称,您可以通过这种方式获取上次安装版本的路径。
如果不是,但您知道 .appref-ms
在哪里,则必须打开它,获取应用程序清单(由 ClickOnce 发布的 .application
文件)并从assemblyIdentity
节点。
ClickOnce 将数据存储在 Windows 注册表项中:
HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment
带有应用程序列表的注册表项:
HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment\SideBySide.0\StateManager\Applications
这是问题所在:
我有两个应用程序。其中一个是我无权访问的 clickonce 应用程序,另一个是我正在设计的 c# 程序。我需要一种方法来通过开始菜单中的 .appref-ms
文件或从该文件中找到的令牌 id/name 来追踪安装应用程序的应用程序文件夹。
这可能吗?有没有办法查询 clickonce 存储以获取应用程序列表及其安装位置?我找到的所有内容都是指打开进程列表并转到进程映像位置,但如果程序不是 运行.
,这是不可能的我不知道查询 ClickOnce 存储的方法。
但正如@Vojtěch Dohnal 所说。所有 ClickOnce 应用程序都将存储在 C:\Users\xxxx\AppData\Local\Apps.0
我们可以想象一个解决方案,它会为每个用户列出树中的所有可执行文件,并且只保存最后的版本。
这是一个示例代码片段(单用户):
var exes = Directory.EnumerateFiles(@"C:\Users\<user>\AppData\Local\Apps.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);
}
}
您会在应用程序字典中找到所有应用程序名称作为键,作为值的元组包含可执行文件的完整路径及其版本。
没有找到另一种获取信息的方法,但我希望它能完成任务
在我的电脑上试过,似乎工作正常
如果您知道您的应用程序名称,您可以通过这种方式获取上次安装版本的路径。
如果不是,但您知道 .appref-ms
在哪里,则必须打开它,获取应用程序清单(由 ClickOnce 发布的 .application
文件)并从assemblyIdentity
节点。
ClickOnce 将数据存储在 Windows 注册表项中:
HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment
带有应用程序列表的注册表项:
HKEY_CURRENT_USER\Software\Classes\Software\Microsoft\Windows\CurrentVersion\Deployment\SideBySide.0\StateManager\Applications