如何在我的程序中打开特定的文件扩展名

How can I make specific file extension open in my program

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

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

当用户运行安装文件时,基本安装开始:接受许可,select安装路径...

程序及其依赖项被解压到 selected 安装路径。

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

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

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

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

但是我有两个问题:

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

2)Ftype命令需要完整的安装路径,我只有相对路径(在bat文件旁边),因为安装路径是用户安装的时候决定的.

;tldr;

我的问题是:

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

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

您的批处理文件可以使用“%~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%

Returns %varName% 中的绝对路径。

使用@Compo 的reg.exe 建议来解决 assoc 命令需要提升权限的问题。