【发布时间】:2019-11-15 09:08:40
【问题描述】:
我创建了一个简单的 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 安装的应用程序?
【问题讨论】:
-
Microsoft VS 安装程序项目可以覆盖他们以前的安装,这应该不是问题。您遇到什么问题迫使您必须卸载旧程序?您可能没有增加版本/内部版本号吗?如果我没记错的话,这不仅要在应用程序中完成,还要在安装程序配置的某个地方完成。
-
@Longoon12000 好的,我现在试试,你知道是否可以发布设置而不是将其复制并粘贴到发布文件夹?
-
发布方式...?如果您只想将安装程序项目的输出复制到其他路径,您可以在安装项目的属性窗口 (here) 中指定构建后事件。
-
@Longoon12000 发布到网络文件夹中。无论如何,我尝试使用高版本的程序启动设置,但出现错误。
标签: c# wpf deployment