Как сделать так, чтобы в моей программе было открыто расширение c - PullRequest
1 голос
/ 15 января 2020

Я создал простую программу на C#, которая сохраняет данные в файл с пользовательским расширением. Файл может быть сохранен в любом месте пользовательского файла P C, и пользователь может каждый раз загружать разные файлы данных.

Я собрал программу в исполняемый файл и развернул ее с помощью стороннего установщика. Программа установки в основном упаковывает исполняемый файл и его зависимости в один исполняемый файл установки, который пользователь может запустить

Когда пользователь запускает установочный файл, начинается базовая установка c: принять лицензию, выбрать путь установки…

И программа и ее зависимости распаковываются по выбранному пути установки.

Теперь я хочу связать пользовательское расширение файла, которое я использую, чтобы моя программа всегда открывалась в моей программе.

Самым простым решением, которое я нашел для этого, было использование bat-файла, который запускается после установки моей программы (это обрабатывается сторонним установщиком, я просто добавляю bat-файл в качестве зависимости).

bat-файл в основном просто запускает команды Asso c и Ftype, например:

Assoc .MyExtension=MyProgram
Ftype MyProgram="Absolute Path" "%%1"

Но у меня есть две проблемы с этим:

1) Для этих команд требуется разрешение администратора, что проблема для моих клиентов.

2) Команде Ftype нужен полный путь к пути установки, но все, что мне нужно ve - относительный путь (который находится рядом с файлом bat), потому что путь установки определяется пользователем при его установке.

; tldr;

Мои вопросы:

1) Могу ли я выполнить sh это без разрешения администратора?

2) Как использовать Ftype с относительным путем.

1 Ответ

1 голос
/ 16 января 2020

Ваш командный файл может определить свое собственное местоположение с помощью "% ~ dp0". Предполагая, что вы договорились о хранении вашего пакетного файла в месте, которое является фиксированным относительным расстоянием от вашего exe, это должно решить вашу проблему.

Эта подпрограмма создаст FQPN:

@rem Create a fully qualified drive/path name with no redundant backslashes.
@rem Convert all forward slashes to backslashes.
@rem Convert all '..\' sequences to an absolute path.
:SetFQPN
  @set %1=%~f2
  @exit /b 0

При вызове с относительным путем пакета:

@call :SetFQPN varName "%~dp0\..\anyrelativepath"
@echo %varname%

Возвращает абсолютный путь в% varName%.

Используйте предложение @ Compo reg.exe, чтобы обойти необходимость повышенных привилегий для assoc команда.

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