.net-core - 使用 ClickOnce : how do I make it useable as a command-line app? 部署的 .net 核心控制台应用程序

标签 .net-core command-line console-application clickonce

我注意到可以使用 Visual Studio 通过 ClickOnce 发布 .net core 5 控制台应用程序。
TLDR;
控制台应用程序的全部意义在于能够使用用户输入的命令选项/参数在命令行上调用它。 ClickOnce 允许我发布控制台应用程序这一事实让我相信这是可能的,但 ClickOnce 似乎通过模糊 exe 的实际路径来反对这个用例。我该如何解决这个问题?

详情
我可以使用 ClickOnce 来部署控制台应用程序并且它可以工作,但只能从 Windows 开始菜单中找到应用程序。应用程序不能(很容易?)从命令行调用,因为它的位置不在用户的路径环境变量中。您可能知道,clickonce 会在“开始”菜单中放置可执行文件的快捷方式...C:\users\<user>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\<ConsoleApp>.appref-ms<ConsoleApp>.appref-ms是指向安装程序的 UNC 文件路径的应用程序引用。如果我理解正确,clickonce 会在用户的机器上安装应用程序,但会掩盖实际可执行文件的位置/文件路径。您基本上被迫使用应用程序引用来启动 ClickOnce 应用程序。
这对于 wpf 应用程序很好,因为它们是从“开始”菜单启动的。但是控制台应用程序呢?
我正在编写的控制台应用程序需要用户提供的选项/参数。如果它只是在开始菜单中,它将在没有任何选项/参数的情况下启动并运行。此外,它会在新的控制台窗口中启动。这使得控制台应用程序(以这种方式部署时)作为另一个可供用户在 powershell 中执行其他操作时执行的命令毫无用处。
问题

  • 是否有一种使用 ClickOnce 部署控制台应用程序的低摩擦方式,并在安装期间将其文件路径添加到用户的 PATH 环境变量中,并且在不启动新控制台窗口的情况下运行它?
  • ClickOnce 是用于命令行应用程序部署的错误工具吗?如果没有,什么是正确的工具?
  • 只能从开始菜单启动并且不能有参数/选项的控制台应用程序有什么意义?
  • 最佳答案

    我在 .Net Framework 应用程序上做了这个
    请注意以下要点:

  • 您需要检测正在运行的应用程序是否是网络部署的
  • Click once 应用程序不会将空格字符作为参数分隔符
  • 在我的情况下,您需要定义参数单独的字符,我使用逗号
  • static void
     Main(string[] args)
    {
        if (ApplicationDeployment.IsNetworkDeployed)
        {
            var inputArgs = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;
            if (inputArgs != null && inputArgs.Length > 0)
            {
                args = inputArgs[0].Split(new char[] { ',' });
            }
        }
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm(args)); // Here you pass the argument to the application
    
    }
    
    在 Windows 命令提示符下,您可以调用该应用程序
    myapp.appref-ms argument1,argument2,argument3

    关于.net-core - 使用 ClickOnce : how do I make it useable as a command-line app? 部署的 .net 核心控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65670951/

    相关文章:

    c# - 使用 Validator 属性(或替代属性)来验证结构

    azure - ASP.NET Core Web 应用程序作为 Azure 服务总线使用者/接收者

    perl - 如何从 unix shell 调用带参数的子程序

    c# - 在 .NET 控制台应用程序中监听按键

    c# - 我创建了一个多项选择的 C# 控制台程序,我放置了一个奖励阶段,但是当它到达它时,没有任何显示

    c - C 控制台中的更新屏幕

    windows - dotnet 未被识别为 cmdlet 的名称

    visual-studio-code - VSCode : tasks. json:dotnet 构建输出参数失败,并显示 MSBUILD:错误 MSB1001:

    unit-testing - 如何从命令行运行单元测试?

    bash - 你如何使用命令启动 Unix screen 命令?