【问题标题】:Install ClickOnce without running在不运行的情况下安装 ClickOnce
【发布时间】:2010-10-05 13:17:05
【问题描述】:

当您安装 ClickOnce 应用程序时,程序会在安装后运行。是否可以在不运行的情况下安装

我知道我可以使用设置和部署项目并创建安装程序,但我更喜欢使用 ClickOnce。

【问题讨论】:

标签: vb.net deployment clickonce


【解决方案1】:

我猜你可以伪造它。引入“IsInstalled”布尔属性,默认为 false。然后在 Program.cs 中,将 Main() 方法更改为如下所示:

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    if (!Properties.Settings.Default.IsInstalled)
    {
        Properties.Settings.Default.IsInstalled = true;
        Properties.Settings.Default.Save();

        MessageBox.Show("Install Complete");
        return;
    }

    Application.Run(new Form1());
}

因此,现在当应用首次安装时,它会检查该属性并向用户显示一条消息,然后退出。

如果您想变得棘手,那么您可以查看解析部署的激活 URI,并使用 URI 参数指定程序是在首次安装时运行还是静默关闭。

【讨论】:

  • 为什么它首先运行应用程序?
  • 仅根据 Magnus 的官方解决方案(使用 MageUI.exe)对该解决方案投了反对票。
【解决方案2】:

您可以通过编辑Mage 中的应用程序清单来完成此操作。安装后有一个复选框可以停止应用程序的运行。

如果您不习惯手动或使用 Mage 编辑清单,则可以使用内置部署类检查这是否是应用程序第一次运行。

using System.Deployment.Application

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    if (ApplicationDeployment.CurrentDeployment.IsFirstRun)
    {
        MessageBox.Show("Install Complete");
        return;
    }

    Application.Run(new Form1());
}

【讨论】:

  • IsFirstRun 在您升级应用程序时为真
  • 安装后阻止应用程序运行的复选框在哪里?我正在使用 Visual Studio Pro 2019,但在运行 MageUI 时看不到它。也许过去 10 年情况发生了变化:-)
【解决方案3】:

在尝试了所有建议的解决方案但仍然遇到相同的问题后,我摆弄了一段时间,并将几个解决方案组合成一个真正有效的解决方案。

仅设置“isInstalled”属性的问题是升级后会保留该值,因此每次安装新版本时,它都会再次运行应用程序。但是使用应用程序清单文件和 Mage 只是解决这个小问题的工作量太大而且太复杂。

所以我所做的是获取应用程序运行版本的当前构建号,将其保存到一个属性中,然后每次都根据运行版本检查该属性。这是有效的,因为每次发布都会增加版本号。

1) 在 AssemblyInfo.cs 中更改您的程序集版本以使用通配符:

[assembly: AssemblyVersion("1.0.*")]

2) 如果在构建时引发“确定性”错误,请打开您的 .csproj 文件并在 PropertyGroup 部分中将确定性设置为 false

<Deterministic>false</Deterministic>

3) 添加这个防呆函数来获取正在运行的程序集版本:

private Version GetRunningVersion()
{
    try
    {
        return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion;
    }
    catch
    {
        return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
    }
}

4) 在项目的属性中,打开“设置”选项卡,并添加一个名为 lastVersion(字符串、用户)的设置。将值留空。

5) 添加此属性以用于确定这是否是应用程序安装后第一次运行。

private bool isFirstRun
{
    get { return Properties.Settings.Default.lastVersion != GetRunningVersion().ToString(); }
}

6) 然后在您的代码中,在您检查 isFirstRun 之后添加此

if (isFirstRun)
{
    Properties.Settings.Default.lastVersion = GetRunningVersion().ToString();
    Properties.Settings.Default.Save();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2018-11-03
    • 2011-05-09
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多