首页 > 解决方案 > 有什么方法可以创建更新应用程序当前版本的设置?

问题描述

我创建了一个简单的 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 安装的应用程序?

标签: c#wpfdeployment

解决方案


最好创建另一个应用程序,启动器,其目的是检查其他应用程序上的本地文件的版本号是否低于存储在数据库/ftp 中的版本号。如果是真的,那么您的 Launcher 将从您的 ftp 下载新版本并覆盖旧版本。就像我在处理我当前的 C# 项目一样:P

当然,您也可以将您的 Launcher 设为主要可执行文件,在更新检查结束时,它可以运行您的程序,仅此而已,您的用户只需运行启动器即可更新和/或运行您的主程序。


推荐阅读