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

Batch file 如何在程序中打开特定的文件扩展名,batch-file,associate,Batch File,Associate,我用C语言创建了一个简单的程序,它将数据保存到一个具有自定义扩展名的文件中。 该文件可以保存在用户PC的任何位置,用户每次都可以加载不同的数据文件 我已经将程序构建到一个exe文件中,并使用第三方安装程序进行部署。 安装程序基本上将exe文件及其依赖项打包到一个用户可以运行的安装exe文件中 当用户运行安装文件时,基本安装开始:接受许可证,选择安装路径 程序及其依赖项将解压缩到选定的安装路径 现在,我想将用于程序的自定义文件扩展名与程序中始终打开的文件扩展名相关联 我找到的最简单的解决方案是使用

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

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

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

程序及其依赖项将解压缩到选定的安装路径

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

我找到的最简单的解决方案是使用安装程序后运行的bat文件。这由第三方安装程序处理,我只是将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%
返回%varName%中的绝对路径


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

如果路径是相对的,那么它必须是相对的。为什么您不知道这些信息,或者至少不允许脚本来确定这些信息?如果最终用户没有管理权限,我很惊讶他们可以或者应该被允许安装您的程序。当然,如果程序只针对一个用户,您可以将信息添加到当前用户注册表HKEY_Current_user\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts,而不是您选择的命令所使用的全局-本地\u机器键。@Compo这取决于用户决定安装程序的位置使用搜索功能,或者打开命令提示窗口并输入reg/?阅读命令行工具reg.exe的帮助信息。如果您正在安装该程序,您应该能够添加所需的条目作为安装例程的一部分,您需要阅读安装程序软件的帮助信息。如果程序不需要安装,您仍然可以将其和任何附带的文件打包到自解压存档中。许多自提取器程序都有请求目标输入并在以后必要时使用该位置的方法。我建议研究我在中发布的注释批处理文件代码,将所有无扩展名文件或特定文件扩展名与UltraEdit或UEStudio关联。您可以根据需要修改代码。