【问题标题】:How can I make specific file extension open in my program如何在我的程序中打开特定的文件扩展名
【发布时间】:2020-01-15 08:44:43
【问题描述】:

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

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

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

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

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

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

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

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

但我有两个问题:

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

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

;tldr;

我的问题是:

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

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

【问题讨论】:

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

标签: batch-file associate


【解决方案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 命令权限的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多