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

时间:2012-03-09 17:15:22

标签: c# winforms clickonce

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

您可能已经知道,“仅在线”功能不会在桌面上放置任何图标,因此每次运行时,用户都必须运行setup.exe文件才能执行此操作。

我的问题是,无论如何,我实际上可以创建一个可以指向安装文件或任何解决方法的图标,以确保用户可以通过简单的方式运行应用程序,而无需查找安装文件每次?

用户可能对计算机知之甚少,因此每次导航到下载文件都是一项艰巨的任务,我想让他们更轻松。

我知道如果我使用离线/在线应用程序,它将解决问题,但我希望它只能在线。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您想要一个只在线的ClickOnce应用程序的原因是什么?我总是建议离线,除非你的应用程序确实是一个优势。

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

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

总之,这里确实没有答案:)。但...

  1. 请确保您的推理完全没有进行离线安装。
  2. 运行setup.exe一次后,指示用户单击.application url(如果切换到脱机状态,则单击桌面快捷方式)而不是setup.exe。

答案 1 :(得分:1)

您可以在第一个应用程序运行时手动创建桌面快捷方式,并将其指向应用程序的URL或下载文件的路径(我猜,如果用户删除文件,url会更安全)。代码看起来像这样(需要调整到你的URL):

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);
        }

    }
}

http://geekswithblogs.net/murraybgordon/archive/2006/10/04/93203.aspx

答案 2 :(得分:0)

据我所知,没有可靠的方法只能在线运行ClickOnce应用程序而不是创建该setup.exe的快捷方式。