Как определить папку, из которой было запущено мое приложение WPF (xbap)? - PullRequest
4 голосов
/ 18 мая 2011

Я занимаюсь этим несколько часов.Я нашел множество ссылок, в том числе несколько здесь, на SO, которые утверждают, что показывают, как найти путь запуска или каталог приложения.Все предлагаемые решения возвращают местоположение:

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

Когда мой WPF xbap запускается из удаленного местоположения.Мне нужно определить фактическую папку удаленного расположения.

Я развертываю это на внутреннем сервере ABCDEF, поэтому для запуска этого приложения я ввожу:

\\ABCDEF\myApp.xbap

Я хочу программно определить сервер и папку.Моя причина в том, что каждый раз, когда вы публикуете WPF с включенным «automatically increment revision with each publish».Папка, в которой расположены дополнительные библиотеки 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 ]

4 голосов
/ 18 мая 2011

Я думаю, что это направит вас в правильном направлении.Поскольку, похоже, что вы развертываете через ClickOnce, вы должны получить необходимую информацию здесь:

System.Deployment.Application.ApplicationDeployment.CurrentDeployment

, этот класс можно найти в System.Deployment.dll

К сожалению, объект CurrentDeploymentна самом деле не говорит вам, где находится приложение, поэтому вам придется проделать дополнительную работу: (

, если вы позвоните так:

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

вы получите что-то вроде этого (длякаталог данных)

C: \ Users \ Администратор \ 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

Так что я бы создал функцию, которая

  • принимает в первомfilepath
  • Определяет случайно сгенерированный файлame
  • находит папку приложения на основе этого имени папки (в котором содержатся ваши исполняемые файлы)

Я думаю, что создание метода расширения для типа ApplicationDeployment подойдет.

Надеюсь, что помогает

0 голосов
/ 28 мая 2014

Это сработало для меня:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...