'Application identity is not set' 与 ClickOnce
'Application identity is not set' with ClickOnce
我正在为这个问题摸不着头脑,并且花了很多时间研究它。我基于此问题查看的每个问题看起来都与调试有关(我也有调试问题)。然而,这不是背后的原因。
在我的应用程序中,我为用户提供了创建快捷方式的选项,以便应用程序在启动时自动 运行(我发现这比编辑注册表更容易)。
string copyPath = Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\";
using (StreamWriter writer = new StreamWriter(copyPath + "\" + "ZApp.url"))
{
string app = System.Reflection.Assembly.GetExecutingAssembly().Location;
writer.WriteLine("[InternetShortcut]");
writer.WriteLine("URL=file:///" + app);
writer.WriteLine("IconIndex=0");
string icon = app.Replace('\', '/');
writer.WriteLine("IconFile=" + icon);
writer.Flush();
}
这段代码效果很好。但是,每当应用程序在后台检查更新时,它都会抛出 Application identity is not set
错误。
这是我用来检查更新的代码:
ApplicationDeployment deploy = ApplicationDeployment.CurrentDeployment; //<- Error thrown here
UpdateCheckInfo update = deploy.CheckForDetailedUpdate();
同样,如果我使用 ClickOnce 放置在我桌面上的图标启动应用程序,效果很好,但如果我使用我的代码在启动文件夹中创建的快捷方式图标,效果就不佳。我有办法以编程方式解决这个问题吗?
部署状态是错误的原因。
正如 rudolf_franek 所解释的那样,该应用程序未进行网络部署。在访问 CurrentDeployment
之前应用检查将使您的应用程序更安全:
if (ApplicationDeployment.IsNetworkDeployed)
{
// accessing the CurrentDeployment won't throw an exception
var deploy = ApplicationDeployment.CurrentDeployment;
}
但是要解决导致 ApplicationDeployment.IsNetworkDeployed
为假的问题,您应该看看这个 MSDN forum post。
tl;dr: 创建引用 *.exe 文件的快捷方式将使应用程序 运行 成为独立的。
解决方法:
您应该创建一个适当的快捷方式,在其中引用应用程序部署清单(a.k.a.*.application 文件)。
这应该可以解决问题。
我正在为这个问题摸不着头脑,并且花了很多时间研究它。我基于此问题查看的每个问题看起来都与调试有关(我也有调试问题)。然而,这不是背后的原因。
在我的应用程序中,我为用户提供了创建快捷方式的选项,以便应用程序在启动时自动 运行(我发现这比编辑注册表更容易)。
string copyPath = Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\";
using (StreamWriter writer = new StreamWriter(copyPath + "\" + "ZApp.url"))
{
string app = System.Reflection.Assembly.GetExecutingAssembly().Location;
writer.WriteLine("[InternetShortcut]");
writer.WriteLine("URL=file:///" + app);
writer.WriteLine("IconIndex=0");
string icon = app.Replace('\', '/');
writer.WriteLine("IconFile=" + icon);
writer.Flush();
}
这段代码效果很好。但是,每当应用程序在后台检查更新时,它都会抛出 Application identity is not set
错误。
这是我用来检查更新的代码:
ApplicationDeployment deploy = ApplicationDeployment.CurrentDeployment; //<- Error thrown here
UpdateCheckInfo update = deploy.CheckForDetailedUpdate();
同样,如果我使用 ClickOnce 放置在我桌面上的图标启动应用程序,效果很好,但如果我使用我的代码在启动文件夹中创建的快捷方式图标,效果就不佳。我有办法以编程方式解决这个问题吗?
部署状态是错误的原因。
正如 rudolf_franek 所解释的那样,该应用程序未进行网络部署。在访问 CurrentDeployment
之前应用检查将使您的应用程序更安全:
if (ApplicationDeployment.IsNetworkDeployed)
{
// accessing the CurrentDeployment won't throw an exception
var deploy = ApplicationDeployment.CurrentDeployment;
}
但是要解决导致 ApplicationDeployment.IsNetworkDeployed
为假的问题,您应该看看这个 MSDN forum post。
tl;dr: 创建引用 *.exe 文件的快捷方式将使应用程序 运行 成为独立的。
解决方法:
您应该创建一个适当的快捷方式,在其中引用应用程序部署清单(a.k.a.*.application 文件)。
这应该可以解决问题。