【问题标题】:ClickOnce: "Application identity is not set"ClickOnce:“未设置应用程序标识”
【发布时间】:2014-07-28 08:50:29
【问题描述】:

我有一个相当老的 Windows Forms 应用程序,我目前正在尝试为其构建 ClickOnce 安装程序。

一切都很好,除了从应用程序内部访问 ApplicationDeployment.CurrentDeployment 的任何尝试都会导致:

未设置应用程序标识。

我在网络上发现了很多此类帖子,尤其是在 StackOverflow 上,但人们在调试器下运行他们的应用程序,或者根本不是网络部署的本地版本。

我强调,在我的例子中,应用程序是网络部署的(可离线使用)。我通过单击由 ClickOnce 安装程序创建的桌面图标来运行它。更新工作正常(尝试发布更新以确保其正常工作)。

但是,ApplicationDeployment.CurrentDeployment 不可访问。

我做错了什么?

事实上,我只是想读取出现在“程序和功能”小程序中的应用程序版本。有没有办法在不使用 ClickOnce API 的情况下读取这些信息,例如,直接从注册表(我知道这不好)。

代码很简单:

[STAThread]
static void Main(string[] argv)
{
System.Windows.Forms.MessageBox.Show(ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString()); // Crash here
DoSomethingUseful();
}

【问题讨论】:

  • 您应该检查应用程序是否是网络部署的!即使您认为这不是您的问题的一部分。这样做是为了获得最佳实践。
  • 仅供参考添加到@Herdo 评论。 ApplicationDeployment.IsNetworkDeployed docs.microsoft.com/en-us/dotnet/api/…

标签: c# deployment installation clickonce


【解决方案1】:

我已经使用一个属性完成了这项工作,并将其值直接绑定在XAML 中。我正在使用 WPF,但我希望这会有所帮助。

private string _verSion = ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
public string verion
{
    get
    {
        return _verSion;
    }
    set
    {
        _verSion = value;
        OnPropertyChanged(() => verion);
    }
}

我没有使用消息框完成此操作。你可以试试同样的。打开一个窗口“关于我们”什么的。获取一个字符串并将其绑定到此属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-19
    • 2013-10-26
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多