Я думаю, что это направит вас в правильном направлении.Поскольку, похоже, что вы развертываете через 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 подойдет.
Надеюсь, что помогает