1

我在 C# 中创建了一个简单的程序,它将数据保存到具有自定义扩展名的文件中。该文件可以保存在用户PC的任何地方,用户每次可以加载不同的数据文件。

我已将该程序构建到一个 exe 文件中,并使用 3rd 方安装程序进行部署。安装程序基本上将 exe 文件及其依赖项打包到一个用户可以运行的安装 exe 文件中

当用户运行安装文件时,基本安装开始:接受许可,选择安装路径...</p>

并且程序及其依赖项被解压缩到选定的安装路径。

现在我想关联我用于我的程序的自定义文件扩展名以始终在我的程序中打开。

我找到的最简单的解决方案是使用在我的程序安装后运行的 bat 文件(这由 3rd 方安装程序处理,我只是将 bat 文件添加为依赖项)。

bat 文件基本上只是像这样运行 Assoc 和 Ftype 命令:

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

但我有两个问题:

1)此命令需要管理权限,这对我的客户来说是个问题。

2)Ftype命令需要安装路径的全路径,但我只有相对路径(在bat文件旁边),因为安装路径是用户安装时确定的。

;tldr;

我的问题是:

1)我可以在没有管理许可的情况下完成吗?

2)如何使用具有相对路径的Ftype。

4

1 回答 1

1

您的批处理文件可以使用 '%~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命令权限。

于 2020-01-15T23:10:23.277 回答