我该如何确定我的WPF(xbap)应用程序启动的文件夹?

4

我已经调查了几个小时。我找到了许多链接,包括在SO上的几个链接,声称可以显示如何查找启动路径或应用程序目录。所有建议的解决方案都返回一个位置:

C:\Users\<my user name>\AppData\Local\Apps\2.0\XO8PWL8B.5HH\1GZX7M0H.N1J\<temp location>\

当我的WPF xbap从远程位置运行时。我需要确定远程位置的实际文件夹。

我正在将其部署到内部服务器ABCDEF,因此为了运行此应用程序,我输入:

\\ABCDEF\myApp.xbap

我希望能够编程方式确定服务器和文件夹。我的原因是每次使用“自动逐步发布版本”功能发布WPF时,包含附加DLL的文件夹会发生变化,这些附加程序是此程序所依赖的。

我希望能够动态地确定正确的文件夹位置。

我已经尝试过:

'Dim path As String = Reflection.Assembly.GetEntryAssembly().Location
'Dim Path As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)
'System.IO.Path.GetDirectoryName(System.Reflection. Assembly.GetExecutingAssembly.Location)
'application.StartupPath

所有这些尝试都没有奏效。

以下链接提供了许多我尝试过的方法:

链接1

链接2

链接3

链接4

链接5


只是好奇,这些DLL是你的应用程序依赖的.NET组件吗?如果是,你不需要担心这个问题,只要在构建中包含这些组件,清单就会替你处理。项目属性 -> 发布 -> 应用程序文件 -> 确保你已经标记了要部署与应用程序一起的依赖项组件。 - J Cooper
你可能认为不需要,但我的前任有一个专门告诉应用程序所有位置的网站设计。现在我正在将其转换为WPF,如果我能确定DLL的位置,我相信这将会变得更简单。这些DLL来自于30个我的主要应用程序所依赖的项目。 - Michael Eakins
2个回答

4

我认为这会指引你朝着正确的方向前进。由于听起来你是通过ClickOnce进行部署,所以你应该在这里找到需要的信息:

System.Deployment.Application.ApplicationDeployment.CurrentDeployment

这个类可以在 System.Deployment.dll 中找到。

不幸的是,CurrentDeployment 对象并没有告诉你应用程序的位置,因此你需要做更多的工作 :(

如果你调用这个:

var datadir = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory

你将得到类似于以下内容(用于datadirectory):

C:\Users\Administrator\AppData\Local\Apps\2.0\Data\BVPTZA5G.3AC\WC2WBZ92.D96\ expe..tion_ba14dd6bedbd6876_0000.0009_7919ca38a4e51341\Data\1.0.0.0

从那里,您需要获取上面加粗文件夹的文件夹名称,因为应用程序位于此处(而不是数据目录):

C:\Users\Administrator\AppData\Local\Apps\2.0\RCVHD71Y.7CQ\BC42YMHT.ZQ0\ expe..tion_ba14dd6bedbd6876_0000.0009_7919ca38a4e51341

所以我会创建一个函数:

  • 接受第一个文件路径
  • 确定随机生成的文件夹名称
  • 基于该文件夹名称找到应用程序的文件夹(其中包含您的可执行文件)

我认为在ApplicationDeployment类型上创建扩展方法很合适。

希望这有所帮助。


0
这对我有用:
string exePath = System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName; string dir = Path.GetDirectoryName(exePath);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接