1. 用WPF开发,需要管理员权限并开机启动,以写注册表的方式实现。仅写注册表只能启动一般权限的程序。

2. 考虑这样实现: 程序以一般权限启动,启动以后申请管理员权限。

实现:

App类中重写OnStartup事件,判断当前程序的权限,如果不是管理员权限,则申请权限,重启进程并关闭当前进程:

                WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
if (!principal.IsInRole(WindowsBuiltInRole.Administrator))
{
if (IsRunningOne(fileName))
{
MessageBox.Show("already exit");
Application.Current.Shutdown();
Environment.Exit(0);
}
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = Assembly.GetExecutingAssembly().Location;
startInfo.Verb = "runas"; Process.Start(startInfo);
Current.Shutdown();
Environment.Exit(0);
}

  如果已经有实例运行,则不启动。

3.  开机启动的程序,获取当前exe所在路径的值为“C:\Windows\System32”

App类:,其中不允许运行两个实例。

public partial class App : Application
{
string fileName = "SystemManager"; private bool IsRunning(string fileName)
{
return Process.GetProcessesByName(fileName).Length > ;
} private bool IsRunningOne(string fileName)
{
return Process.GetProcessesByName(fileName).Length > ;
} protected override void OnStartup(StartupEventArgs e)
{
if (Debugger.IsAttached)
{
base.OnStartup(e);
return;
}
if (!IsRunning(fileName))
{ WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
if (!principal.IsInRole(WindowsBuiltInRole.Administrator))
{
if (IsRunningOne(fileName))
{
MessageBox.Show("already exit");
Application.Current.Shutdown();
Environment.Exit();
}
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = Assembly.GetExecutingAssembly().Location;
startInfo.Verb = "runas"; Process.Start(startInfo);
Current.Shutdown();
Environment.Exit();
}
}
else
{
MessageBox.Show("实例运行超过2个");
}
//base.OnStartup(e);
} }

WIN8,开机启动 需要管理员权限的程序的更多相关文章

  1. windows Service启动带有管理员权限的GUI进程

    事情是这样的,公司的产品有个守护进程(windows Service)需要启动产品的主程序exe,让主程序它运行为管理员权限(因为主程序会加载一个插件,插件中有列出端口监听的功能,需要由端口查找到进程 ...

  2. C#启用管理员权限运行程序

    方法一:关闭程序重新请求打开 static class Program { [STAThread] static void Main() { Application.EnableVisualStyle ...

  3. C# 使用管理员权限运行程序

    最近在开发OPCServer组件过程中,在注册opcServer是总是返回false,后来查找原因得知在本地主机注册opcServer时,需要使用管理员权限. OPCServer在一台机器上部署时只需 ...

  4. C# 程序软件启动默认管理员权限。

    在vs的Properties目录中找到 app.manifest,将其中level="asInvoker" 改成 level="requireAdministrator& ...

  5. C# 默认以管理员权限运行程序

    /** * 当前用户是管理员的时候,直接启动应用程序 * 如果不是管理员,则使用启动对象启动程序,以确保使用管理员身份运行 */ //获得当前登录的Windows用户标示 //URL:http://w ...

  6. delphi调试需要管理员权限程序报错“Unable to create process:请求的操作需要提升”

    delphi调试启动需要UAC权限的程序的时候会报错“Unable to create process:请求的操作需要提升”.这是因为delphi没有以管理员身份启动,这样delphi createp ...

  7. [Windows]VS2010如何以管理员权限启动?(转)

    在某些项目进行开发的时候,需要提升应用程序本身的权限,这个是很容易的.但是如何让VS2010启动的时候就已管理员权限运行程序呢?为这个问题苦恼了好久,终于找到了办法. 找到VS2010的快捷方式:右击 ...

  8. vs开发 winform 设置winform 获取管理员权限启动

    因为需要设置为开机项 没有管理员权限对注册表访问失败 C# 以管理员身份运行WinForm程序 转载https://www.bbsmax.com/A/obzbkKrQJE/ 鱼洛 2016-07-29 ...

  9. .Net程序随系统开机启动(仿Foxmail托盘效果控制)

    对于使.NET程序随系统开机启动,最常用的可能就是向在注册表中注册开机启动项,或是建立Windows服务,使程序随系统启动而启动.这里以WinForm程序为例,测试Demo分享,同时附上对于程序托盘的 ...

随机推荐

  1. [译]:Orchard入门——部件管理

    原文链接:Managing Widgets 在Orchard中,部件是可以加入到当前当前主题任何位置或区域(如侧栏sidebar或底部区域footer)的UI块(如:HTML)或代码部分(如:内容部分 ...

  2. POJ 1743 Musical Theme 二分+后缀数组

    Musical Theme   Description A musical melody is represented as a sequence of N (1<=N<=20000)no ...

  3. 【CentOS】文件与目录管理

    一.文件与目录管理 0.cd--change directory cd -  返回上次的目录 cd ~ 返回到家目录 --对于root用户来说是/root,对于普通用户来说是/home/用户名 cd ...

  4. BZOJ2087 : [Poi2010]Sheep

    一条边能连上当且仅当它没有经过任何点,并且两边的点都是偶数个. 枚举原点,通过极角排序求出哪些边是合法的,然后区间DP即可. 时间复杂度$O(nm\log m+n^3)$. #include<c ...

  5. [转]PHP语言的数据库操作函数的理解

    就我接触到的R语言以及对数据库的操作来说,基本的操作其实也就是CRUD(Create, Read, Update, Delete). 习惯了之后,对PHP中的MYSQLI操作函数感觉很不适应,查询或者 ...

  6. DOTA 2 API(个人资料)

    获取个人资料 http://wiki.teamfortress.com/wiki/WebAPI/GetPlayerSummaries 获取个人库存 http://wiki.teamfortress.c ...

  7. CentOS7和win7双系统启动项

    1.添加win7启动项编辑文件 /boot/grub2/grub2.conf menuentry 'Windows 7' { insmod ntfs set root='hd0,1' chainloa ...

  8. Web前端学习过程

    推荐学习网站www.freecodecamp.cn http://www.w3school.com.cn/ 步骤: 作者:张帅 知乎链接:https://www.zhihu.com/question/ ...

  9. About_PHP_验证码的生成

    验证码就是一张图片,用到几个关键字: <?php session_start(); $arr = array( 'a','b','c','d','e','f','g','h','i','j',' ...

  10. java中强制类型转换

    在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...