如何用C++以管理员身份启动Windows中的应用程序

在StackOverflow上已经有不止一个人问了:
How to run EXE With admin privileges
C++: Run program as administrator
c++ createprocess powershell as admin, hidden and dont wait for it
根据来自这些的回答,找出合适的函数

1.函数ShellExecuteA (shellapi.h)。来自ShellExecuteA function (shellapi.h)

用于对特定文件执行操作,语法规范:

HINSTANCE ShellExecuteA(
  [in, optional] HWND   hwnd,
  [in, optional] LPCSTR lpOperation,
  [in]           LPCSTR lpFile,
  [in, optional] LPCSTR lpParameters,
  [in, optional] LPCSTR lpDirectory,
  [in]           INT    nShowCmd
);

参数:
(1) [in, optional] hwnd
父窗口的句柄,用于显示UI界面或错误信息。如果本操作与窗口无关,值就为NULL。
(2) [in, optional] lpOperation
指向一个以NULL结尾的字符串的指针,指出所要执行的动作,可用动词的集合取决与特定的文件或文件夹。通常可用动词为:

edit: 启动一个编辑器,并打开文档用于编辑,如果lpFile不是文档文件,函数失败。
explore: 浏览一个由lpFile指向的文件夹。
find: 从lpDirectory指定的文件路径启动搜索
open: 打开由lpFile指向的文件或文件夹
print: 输出由 lpFile指定的文件,如果lpFile不是文档文件,函数就会失败
runas: 以管理员的身份加载一个应用程序,用户账户控制(User Account Control
)将提示用户同意运行提升的应用程序,或者输入用于运行应用程序的管理员帐户的凭据。(刚刚我在Visual Studio上试了,如果程序本身就是管理员身份运行,那么由它以管理员身份启动的应用程序就不会提示用户而直接运行

(3) [in] lpFile
指向一个以NULL结尾的字符串的指针,指明了用于执行指定动作的文件或对象。为了指定一个Shell名称空间对象,传递完全限定的解析名称。
(4)[in, optional] lpParameters
如果之前的lpFile指明了一个可执行文件,该参数是一个指向了以NULL结尾的字符串的指针,指明了要传给这个应用程序的参数。
(5) [in, optional] lpDirectory
只想一个以NULL结尾的字符串的指针,指出了动作默认的工作路径,如果值为NULL,就会使用当前的工作路径。如果lpFile提供了相对路径,就不会使用lpDirectory的相对路径。
(6) [in] nShowCmd
这个参数可选的值很多,参考ShowWindow function (winuser.h)

返回值:
一旦成功就会返回超过32的值。

2.函数CreateProcessA function (processthreadsapi.h),来自CreateProcessA function (processthreadsapi.h)

用于创建一个新进程和它的主线程,新进程运行在调用进程的安全环境中,

参数
(1) [in, optional] lpApplicationName
要被执行的模块名。该字符串可以指出要执行的模块的完整路径和文件名,或者它可以指出一个部分的名称。此参数的值可以为NULL,在这种情况下,模块的名称将是lpCommandLine的字符串中以空格结尾的第一个部分。
(2) [in, out, optional] lpCommandLine
要执行的命令行。最长为32767个字符,系统增加了用于结束的NULL字符,目的是为了把文件和它的参数区分开来,这样在内部执行的时候,原始的字符串就被分成了两个部分。
(3)[in, optional] lpProcessAttributes
指向一个 SECURITY_ATTRIBUTES结构体的指针,决定是否新进程对象的返回句柄可以被子进程所继承,如果此参数为NULL,句柄不能被继承,此时进程会得到一个默认的安全描述符。
(4)[in] bInheritHandles
如果此参数为FALSE,发起调用的进程的句柄将不会被继承。
(5) [in] dwCreationFlags
控制优先级类和进程创建的标志。
(6) [in, optional] lpEnvironment
如果此参数为NULL,新进程使用它的父进程的环境

。。。。。。。。

暂时选择ShellExecuteA function (shellapi.h)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
应用程序无法正常启动0xc000007b的错误通常是由系统文件损坏、缺失或不兼容引起的。解决这个问题的方法有以下几个步骤: 1. 运行系统文件检查工具:打开命令提示符,并以管理员身份运行。输入" sfc /scannow "并按下回车键,让系统文件检查工具开始扫描并修复系统文件的错误。这可以帮助解决由于系统文件损坏引起的应用程序无法正常启动的问题。 2. 更新操作系统和驱动程序:确保操作系统和所有相关的驱动程序都是最新版本。可以通过Windows Update来获取最新的系统更新,也可以通过设备管理器来更新驱动程序。这可以修复由于不兼容或过时的驱动程序引起的问题。 3. 重新安装应用程序:如果只有特定的应用程序出现了0xc000007b错误,尝试重新安装该应用程序。首先,卸载应用程序,然后重新下载最新版本的安装包,并按照安装向导进行安装。这可以解决由于应用程序文件损坏或错误引起的问题。 4. 安装所需的运行时库:某些应用程序需要特定的运行时库才能正常运行。确保已安装了应用程序所需的所有运行时库。可以从Microsoft官方网站下载并安装所需的运行时库。 5. 检查病毒和恶意软件:运行安全软件进行全面的系统扫描,以确保系统没有受到病毒或恶意软件的影响。这些恶意软件可能会导致应用程序无法正常启动,并引发0xc000007b错误。 综上所述,解决应用程序无法正常启动0xc000007b错误的方法包括运行系统文件检查工具、更新操作系统和驱动程序、重新安装应用程序、安装所需的运行时库以及检查病毒和恶意软件。根据具体情况,您可以按照上述步骤逐一排查和解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值