如何使用C#/ .NET代码获取ClickOnce应用程序path和版本号?

我想获取ClickOnce应用程序的path和版本号,提供了ClickOnce应用程序的名称

当我手动search它,我发现它的path如下:

'C:\Users\krishnaim\AppData\Local\Apps\2.0\1HCG3KL0.K41\VO5BM4JR.RPO\head..tion_7446cb71d1187222_0005.0037_37dfcf0728461a82\HeadCount.exe' 

但是这个不断变化,它会变成一个硬编码的path。 是否有另一种方法使用C#/ .NET代码获取ClickOnce应用程序(例如,已安装的HeadCount.exe)path和版本号?

看起来有点奇怪,但是获取正在执行的程序集的当前目录有点棘手,所以我的代码可能比你想象的要多,但是我向你保证,它正在减轻其他人可能试图使用Assembly的一些问题。 GetExecutingAssembly .Location属性。

 static public string AssemblyDirectory { get { //Don't use Assembly.GetExecutingAssembly().Location, instead use the CodeBase property string codeBase = Assembly.GetExecutingAssembly().CodeBase; UriBuilder uri = new UriBuilder(codeBase); string path = Uri.UnescapeDataString(uri.Path); return System.IO.Path.GetDirectoryName(path); } } static public string AssemblyVersion { get { var asm = Assembly.GetExecutingAssembly(); //If you want the full four-part version number: return asm.GetName().Version.ToString(4); //You can reference asm.GetName().Version to get Major, Minor, MajorRevision, MinorRevision //components individually and do with them as you please. } } 

为了执行ClickOnce应用程序更新,只要您使用标准部署清单(我不知道如何使用ClickOnce,除非您使用它们),则无需手动执行此操作。

MSDN文章选择ClickOnce更新策略描述了应用程序更新的不同选项。