Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在线ClickOnce部署应用程序,并在桌面/开始菜单上放置一个图标_C#_Winforms_Clickonce - Fatal编程技术网

C# 在线ClickOnce部署应用程序,并在桌面/开始菜单上放置一个图标

C# 在线ClickOnce部署应用程序,并在桌面/开始菜单上放置一个图标,c#,winforms,clickonce,C#,Winforms,Clickonce,我正在开发一个仅在线的winform应用程序,我使用ClickOnce功能部署它,它通过FTP上传到服务器,用户通过http在线执行它 您可能已经知道,Online only功能不会在桌面上放置任何图标,因此每次运行该功能时,用户都需要运行setup.exe文件来执行此操作 我的问题是,如果有任何方法,我实际上可以创建一个图标,该图标可以指向安装文件或任何解决方法,以确保用户获得一种可访问且简单的方法来运行应用程序,而无需每次查找安装文件 用户可能对计算机了解不多,因此每次都要导航到下载的文件可

我正在开发一个仅在线的winform应用程序,我使用ClickOnce功能部署它,它通过FTP上传到服务器,用户通过http在线执行它

您可能已经知道,Online only功能不会在桌面上放置任何图标,因此每次运行该功能时,用户都需要运行setup.exe文件来执行此操作

我的问题是,如果有任何方法,我实际上可以创建一个图标,该图标可以指向安装文件或任何解决方法,以确保用户获得一种可访问且简单的方法来运行应用程序,而无需每次查找安装文件

用户可能对计算机了解不多,因此每次都要导航到下载的文件可能是一项困难的任务,我想让他们更容易

我知道,如果我做一个离线/在线应用程序,它会解决问题,但我希望它只在线


有什么想法吗?

您可以在第一次运行应用程序时手动创建桌面快捷方式,并将其指向应用程序的url或下载文件的路径(我想,如果用户删除文件,url会更安全)。代码可以如下所示(需要根据URL进行调整):


积分到

您想要在线只点击一次应用程序的原因是什么?我总是建议离线,除非你的应用真的是一个边缘案例

在线和离线之间几乎没有区别。所有相同的文件都下载到客户端的相同位置。脱机应用程序向“添加/删除程序”添加一个条目、“开始”菜单快捷方式和可选桌面快捷方式(如果您的目标是.NET 3.5+)。通过添加/删除程序卸载的能力是关键。当用户出现安装问题时,它使支持应用程序变得更加容易

此外,您还提到了每次运行setup.exe的用户。这是不必要的。setup.exe将包含引导的先决条件,然后在完成后启动应用程序。如果用户运行过setup.exe一次,则只需单击指向.application文件的链接。这肯定会加快应用程序的启动时间。此外,在许多情况下,用户必须具有管理员权限才能运行setup.exe;单击.application不会(假设具有管理员权限的人已经运行了setup.exe)

总之,这里真的没有答案:)。但是

  • 绝对要确保你的理由是正确的,不要进行离线安装
  • 运行setup.exe一次后,请指示用户单击.application url(或桌面快捷方式,如果切换到脱机),而不是setup.exe

  • 据我所知,没有比创建setup.exe的快捷方式更可靠的方法来运行仅在线ClickOnce应用程序

    void CheckForShortcut()
    {
        ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
    
        if (ad.IsFirstRun)
        {
            Assembly code = Assembly.GetExecutingAssembly();
    
            string company = string.Empty;
            string description = string.Empty;
    
            if (Attribute.IsDefined(code, typeof(AssemblyCompanyAttribute)))
            {
                AssemblyCompanyAttribute ascompany = (AssemblyCompanyAttribute)Attribute.GetCustomAttribute(code,
                    typeof(AssemblyCompanyAttribute));
                company = ascompany.Company;
            }
    
            if (Attribute.IsDefined(code, typeof(AssemblyDescriptionAttribute)))
            {
                AssemblyDescriptionAttribute asdescription = (AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(code,
                    typeof(AssemblyDescriptionAttribute));
                description = asdescription.Description;
            }
    
            if (company != string.Empty && description != string.Empty)
            {
                string desktopPath = string.Empty;
                desktopPath = string.Concat(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
                    "\\", description, ".appref-ms");
    
                string shortcutName = string.Empty;
                shortcutName = string.Concat(Environment.GetFolderPath(Environment.SpecialFolder.Programs),
                    "\\", company, "\\", description, ".appref-ms");
    
                System.IO.File.Copy(shortcutName, desktopPath, true);
            }
    
        }
    }