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

时间:2011-05-18 18:53:19

标签: wpf vb.net clickonce startup

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

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

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

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

\\ABCDEF\myApp.xbap

我想以编程方式确定服务器和文件夹。我的理由是每次发布打开“automatically increment revision with each publish”的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

所有这些都不起作用。

这些链接提出了我尝试过的许多方法:

Link1

Link2

Link3

Link4

Link5

2 个答案:

答案 0 :(得分:4)

我认为这会引导你朝着正确的方向前进。由于听起来您正在通过ClickOnce进行部署,因此您应该获得所需的信息:

System.Deployment.Application.ApplicationDeployment.CurrentDeployment

此课程可在System.Deployment.dll

中找到

不幸的是CurrentDeployment对象实际上并没有告诉你应用程序的位置,所以你必须做更多的工作:(

如果你这样称呼:

var datadir = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.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

所以我会创建一个

的函数
  • 接收第一个文件路径
  • 确定随机生成的foldername
  • 根据该文件夹名称(包含您的可执行文件)找到应用程序的文件夹

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

希望有所帮助

答案 1 :(得分:0)

这对我有用:

string exePath = System.Reflection.Assembly.GetExecutingAssembly()。GetModules()[0] .FullyQualifiedName;  string dir = Path.GetDirectoryName(exePath);