问题在于:
我有两个申请。其中一个是我无法访问的clickonce应用程序,另一个是我正在设计的c#程序。我需要一种方法来通过开始菜单中的SELECT qryMinRateAll.[Origin City],
qryMinRateAll.[Origin State],
qryMinRateAll.[Destination City],
qryMinRateAll.[Destination State],
RateandTransit.SCAC,
qryMinRateAll.MinRate,
qryMinRateAll.[Lane Tier]
FROM qryMinRateAll
INNER JOIN RateandTransit
ON (qryMinRateAll.[Destination City] = RateandTransit.[Destination City])
AND (qryMinRateAll.[Origin City] = RateandTransit.[Origin City]);
文件或从该文件中找到的令牌ID /名称来跟踪安装应用程序的应用程序文件夹。
这可能吗?有没有办法查询clickonce商店的应用程序列表及其安装位置?我发现的所有内容都是打开进程列表并转到进程映像位置,但如果程序没有运行则无法进行此操作。
答案 0 :(得分:4)
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
答案 1 :(得分:2)
我不知道如何查询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);
}
}
你会在应用词典中找到所有应用程序名称作为键,以及作为值的元组,其中包含可执行文件的完整路径及其版本。
没有找到另一种获取信息的方法,但我希望它能完成这项工作
在我的电脑上试过,似乎工作正常
如果您知道自己的应用程序名称,可以通过这种方式获取上次安装的版本的路径。
如果没有,但您知道.appref-ms
的位置,则必须打开它,获取应用程序清单(ClickOnce发布的.application
文件)并从{{获取可执行文件名称1}} node。