我创建了一个简单的C#WPF程序,该程序通过单击按钮来运行不同程序的各种设置,因此在必须配置PC时它可以自动执行某些任务。
最初,我使用VS的功能发布,因此,当我对代码进行更改并再次部署时,用户单击安装更新,他便拥有了最新版本(太好了),但是此应用程序需要管理员权限,因为它安装了功能并创建了我上面写的文件夹,因此我在项目中添加了app.manifest
来以正确的权限运行我的应用程序。我再次发布了该项目,但遇到一个错误,我读到<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
选项和 ClickOnce 不能同时存在,我在下面找到了一些解决方法,但功能不强代码:
public MainWindow()
{
InitializeComponent();
AdminRelauncher();
}
private void AdminRelauncher()
{
if (!IsRunAsAdmin())
{
ProcessStartInfo proc = new ProcessStartInfo();
proc.UseShellExecute = true;
proc.WorkingDirectory = Environment.CurrentDirectory;
proc.FileName = Assembly.GetEntryAssembly().CodeBase;
proc.Verb = "runas";
try
{
Process.Start(proc);
Application.Current.Shutdown();
}
catch (Exception ex)
{
MessageBoxResult mess = MessageBox.Show("Program must be run as admin! \n\n" + ex.ToString());
}
}
}
private bool IsRunAsAdmin()
{
try
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch (Exception)
{
return false;
}
}
此后,我使用 Microsoft VS Installer Projects 创建安装程序,它运行良好,但是每次更改或修复代码时,我都必须部署安装程序->取消安装旧程序->安装新的,这是浪费时间。
因此,有什么方法可以部署某种安装程序或其他可检查应用程序更新的东西?
还是以管理员身份运行通过ClickOnce安装的应用程序?
答案 0 :(得分:0)
最好创建另一个应用程序,即Launcher,其目的是检查另一个应用程序上的本地文件的版本号是否低于存储在数据库/ ftp中的版本号。如果属实,则Launcher将从ftp下载新版本并覆盖旧版本。就像我正在处理当前的C#项目:P
当然,您也可以将Launcher设为主要可执行文件,在更新检查结束时,它可以运行您的程序,仅此而已,您的用户只需运行Launcher即可更新和/或运行您的Main。程序。