安装ClickOnce应用程序时,程序会在安装后运行。是否可以在没有运行的情况下安装?
我知道我可以使用设置和部署项目并创建安装程序,但我更喜欢使用ClickOnce。
答案 0 :(得分:8)
要在安装后禁用自动启动,您只需按照MSDN文章 How to: Disable URL Activation of ClickOnce Applications (使用工具MageUI.exe)中的说明禁用URL激活。
禁用应用程序的URL激活
选择“部署选项”选项卡。
清除安装后自动运行应用程序复选框。
保存并签署清单。
答案 1 :(得分:4)
我想你可以假装它。引入“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参数指定程序在首次安装时是运行还是静默关闭。
答案 2 :(得分:0)
您可以通过编辑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());
}
答案 3 :(得分:0)
在尝试了所有建议的解决方案并仍然遇到相同的问题之后,我花了一段时间来弄弄这个问题,并将几种解决方案组合到一个实际上有效的解决方案。
仅设置“ isInstalled”属性的问题是升级后会保留该值,因此,每次安装新版本时,它将再次运行该应用程序。但是,使用应用程序清单文件和Mage只是为了解决这个小问题而做的工作太多而且太复杂。
所以我要做的是获取应用程序运行版本的当前内部版本号,将其保存到属性中,然后每次针对运行版本检查该属性。之所以有效,是因为每次发布都会增加版本号。
1)更改您的Assembly版本以在AssemblyInfo.cs中使用通配符:
[assembly: AssemblyVersion("1.0.*")]
2)如果在Build上引发“确定性”错误,请打开.csproj文件,并在“属性组”部分中将“确定性”设置为 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();
}