直接调用ShellExecute函数创建进程,具体的实现代码如下所示。...虽然Windows 7及以上版本的SESSION 0给服务层和应用层间的通信造成了很大的难度,但这并不代表没有办法实现服务层与应用层间的通信与交互。...请注意,继承的句柄具有与原始句柄相同的值和访问权限。 dwCreationFlags [in] 控制优先级和进程创建的标志。...这样,创建的进程才会显示UI界面,与用户进行交互。 在SESSION 0中创建用户桌面进程具体的实现流程如下所示。...获取环境块后,就可以调用CreateProcessAsUser来创建用户桌面进程。CreateProcessAsUser函数的用法以及参数含义与CreateProcess函数的用法和参数含义类似。
常规api创建进程 通过常用的api来创建进程是常规启动进程的方式,最常用的几个api有WinExec、ShellExecute、CreateProcess,我们一个一个来看一下 WinExec 首先是...ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制 HINSTANCE ShellExecuteA( [in,...(char* szPath, UINT Cmd){ HINSTANCE hIns = 0; hIns = ::ShellExecute(NULL,NULL,szPath,NULL,NULL,...RING设计的初衷是将系统权限与程序分离出来,使之能够让OS更好的管理当前系统资源,也使得系统更加稳定。...获取环境块之后,就可以调用CreateProcessAsUser来创建用户桌面进程了。
ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。...然后,使用ShellExecute,打开文本文件。 ...ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。...另外在打开目录文件夹时,ShellExecute命令非 常有用。 ⑷ 程序示例 下面通过一个例子来说名WinExec和ShellExecute的使用。...然后,使用ShellExecute,打开文本文件。
有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。 1.CreateProcess因为使用复杂,比较少用。...如:WinExec(‘Notepad.exe Readme.txt’, SW_SHOW); 3.ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。...首先必须引用shellapi.pas单元:uses ShellAPI; 1).标准用法 ShellExecute函数原型及参数含义如下: function ShellExecute(hWnd...若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。 上述仅仅是ShellExecute函数的标准用法,下面将介绍它的特殊用法。...同时不改变活动窗口 SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口 SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口 SW_SHOWNORMAL 与SW_RESTORE
ShellExecute ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。 ...若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。 上述仅仅是ShellExecute函数的标准用法,下面将介绍它的特殊用法。...新进程树的用户标识符与这个进程的标识符是相同的,由 lpProcessInformation参数返回。...如果这个参数为空,新进程将使用与调用进程相同的驱动器和目录。这个选项是一个需要启动启动应用程序并指定它们的驱动器和工作目录的外壳程序的主要条件。 ...举例来说,在试图与新进程关联的窗口之前,进程应该先调用 WaitForInputIdle。
ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。...1、标准用法 ShellExecute函数原型及参数含义如下: HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile...同时不改变活动窗口 SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口 SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口 SW_SHOWNORMAL 与SW_RESTORE...ShellExecute(this->m_hWnd, “open”, “calc.exe”, “”, “”, SW_SHOW); 或ShellExecute(this->m_hWnd, “open...原文地址: 1、WinExec、ShellExecute和CreateProcess 2、 WINEXEC, SHELLEXECUTE, CREATEPROCESS 发布者:全栈程序员栈长,转载请注明出处
WinExec, ShellExecute,CreateProcess 区别 本文转载自WinExec, ShellExecute,CreateProcess 区别 其中以WinExec最为简单,ShellExecute...ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。...ShellExecute 原型如下: HINSTANCE ShellExecute( HWND hwnd, //父窗口句柄 LPCTSTR lpOperation, //...(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL); // 打开C:\Test.txt 文件 ShellExecute(NULL, "open",..., SW_HIDE); // 打印文件C:\Test.txt 注意:ShellExecute不支持定向输出。
2、ShellExecute() : 不仅可以运行EXE文件,也可以运行系统已经关联的文件。...ShellExecute的功能要强得多,并且可以完全替代WinExec(),事实上,WinExec()也是为了和以前版本兼容而保留,所以,我们要尽量使用ShellExecute()。 ...首先必须引用shellapi.pas单元:uses ShellAPI; 函数原型: function ShellExecute(hWnd: HWND; Operation, FileName, Parameters...第一次运行程序 时应该使用这个值 若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。...刚才的例子: WinExec(pChar('notepad.exe C:\HDC.TXT'),SW_SHOWNORMAL); 就可以改变为(假设窗口的句柄为Handle) ShellExecute(
UAC的具体实现依赖于APPINFO服务对外提供的一个RPC服务端,通过ShellExecute API达到对用户透明的效果。...Timeout, [out] struct APP_PROCESS_INFORMATION* ProcessInformation, [out] long *ElevationType ); 该函数的大部分参数与CreateProcessAsUser...API类似,服务会使用CreateProcessAsUser来创建新的UAC进程。...此标志参数直接映射到CreateProcessAsUser的dwCreateFlags参数。...绕过方法为如果进程没有被提升,我们将有足够的访问权限来打开进程调试对象的句柄,该对象可以与后续提升的进程共享。
记事本的主窗口中还有一个窗口,您需要向它发送消息。您可以使用Microsoft Spy++工具查看此“隐藏”窗口,也可以获取所有子窗口,如下所示:def cal...
ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。...2原型参数编辑 注意事项:使用该函数时,需添加该头文件:[1]#include ShellExecute函数原型及参数含义如下: ShellExecute( hWnd: HWND...若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。 上述仅仅是ShellExecute函数的标准用法,下面将介绍它的特殊用法。...格式一:mailto 如:ShellExecute(Handle,"open", "mailto:", NULL, NULL, SW_SHOWNORMAL);打开新邮件窗口。...同时不改变活动窗口 SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口 SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口 SW_SHOWNORMAL 与SW_RESTORE
但却出现了问题,之前产品代码中会调用windows API - CreateProcessAsUser,来以另一个账号的身份启动另一个进程,另一个账号是通过UI单独提供的。 ...通过查询CreateProcessAsUser微软的官方文档可知,执行此API需要两个权限方可成功,如下: 1. SE_INCREASE_QUOTA_NAME 2. ...CreateProcessAsUser function https://msdn.microsoft.com/en-us/library/windows/desktop/ms682429(v=vs.85
参考资料 c++ 启动exe(外部程序) 三个SDK函数: WinExec, ShellExecute,CreateProcess C++ 枚举进程信息,并结束指定进程 C/C++ Windows API...You can also create a process using the CreateProcessAsUser or CreateProcessWithLogonW function.
在Windows平台,如果需要以某个指定用户来运行程序,此时可以通过使用 Windows CreateProcessAsUser API来实现。但是要实现这个功能首先需要有要切换用户的用户名和密码。...win32process.STARTUPINFO() (hProcess, hThread, dwProcessId, dwThreadId) = \ win32process.CreateProcessAsUser...在用 CreateProcessAsUser API执行命令后,可以通过 GetExitCodeProcess api 来检查进程状态,如果返回结果是 win32con.STILL_ACTIVE,我们可以继续等待
从Vista 开始Session 0 中只包含系统服务,其他应用程序则通过分离的Session 运行,将服务与应用程序隔离提高系统的安全性。如下图所示: ?...潜在的问题 解决方案 在了解了Session 0 隔离之后,给出一些有关创建服务程序以及由服务托管的驱动程序的建议: 1、与应用程序通信时,使用RPC、命名管道等C/S模式代替窗口消息 2、如果服务程序需要...UI与用户交互的话,有两种方式: ①用WTSSendMessage来创建一个消息框与用户交互 ②使用一个代理(agent)来完成跟用户的交互,服务程序通过CreateProcessAsUser创建代理...在XP的FUS下能工作的服务程序将很可能可以在新版系统中工作,注意XP的FUS下的测试不能检测到在Session 0下跟视频驱动有关的问题 本文我们的服务程序将通过CreateProcessAsUser...CreateProcessAsUser(hUserToken, appPath, // Application Name
原因在于 Windows服务一般在Session0里,EXE应用一般在Session1里,Win7及以后的系统将服务与应用程序进行了Session隔离,不允许其进行UI交互,可以考虑穿透Session.../// /// Struct, Enum and P/Invoke Declarations for CreateProcessAsUser. /// <...DllImport("ADVAPI32.DLL", SetLastError = true, CharSet = CharSet.Auto)] private static extern bool CreateProcessAsUser...tStartUpInfo.cb = Marshal.SizeOf(typeof(STARTUPINFO)); bool ChildProcStarted = CreateProcessAsUser...CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern bool CreateProcessAsUser
ShellExecute的功能要强得多,并且可以完全替代WinExec(),事实上,WinExec()也是为了和以前版本兼容而保留,所以,我们要尽量使用ShellExecute()。 ...然后,ShellExecute 返回打开文件的应用的实例句柄。 更奇妙的是ShellExecute不仅能打开机器上的文件,还能打开Internet的站点地址。...ShellExecute还能识别其它协议,象FTP、GOPHER。...总之,ShellExecute函数就是如此简单地打开磁盘文件和Internet文件。...ShellExecute较 WinExex灵活一点,可以指定工作目录,下面的Example就是直接打开 c:\temp\1.txt,而不用加载与 txt文件关联的应用程序,很多安装程序完成后都会打开一个窗口
其中,常用的三种创建进程的方式分别是WinExec()、ShellExecute()和CreateProcessA(),这三种创建进程的方式各有特点。...如果需要创建简单进程或从其他程序启动新进程,可以使用WinExec()或ShellExecute()函数。...但是该函数也存在一些问题,例如ANSI编码、不支持进程标识符等,建议在实际开发中使用更为灵活的CreateProcess()或ShellExecute()函数。...ShellExecute()函数的优点是可以控制进程的启动方式、传递命令参数,并对返回值进行判断,通过传递参数来控制启动进程的方式,比如最大化或最小化窗口,或者在后台启动进程。...NORMAL_PRIORITY_CLASS,表示新进程在普通优先级类中运行lpEnvironment:进程环境空间块的指针,用于设置新进程的环境变量lpCurrentDirectory:指定新进程的初始工作目录,如果为NULL,则使用与调用进程相同的当前目录
使用ShellExecute命令 ⑴ 函数原型: HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile,...ShellExecute(handle, “open “, path_to_folder, NULL, NULL, SW_SHOWNORMAL); 搜索文件夹,可用如下形式 ShellExecute...另外在打开目录文件夹时,ShellExecute命令非常有用。 ⑷ 程序示例 下面通过一个例子来说名WinExec和ShellExecute的使用。...然后,使用ShellExecute,打开文本文件。 ...ShellExecute和WinExec命令用于简单的作业。如果要完全控制一个新进程,就必须调用CreateProcess。
其中,常用的三种创建进程的方式分别是WinExec()、ShellExecute()和CreateProcessA(),这三种创建进程的方式各有特点。...如果需要创建简单进程或从其他程序启动新进程,可以使用WinExec()或ShellExecute()函数。...但是该函数也存在一些问题,例如ANSI编码、不支持进程标识符等,建议在实际开发中使用更为灵活的CreateProcess()或ShellExecute()函数。...ShellExecute()函数的优点是可以控制进程的启动方式、传递命令参数,并对返回值进行判断,通过传递参数来控制启动进程的方式,比如最大化或最小化窗口,或者在后台启动进程。...NORMAL_PRIORITY_CLASS,表示新进程在普通优先级类中运行 lpEnvironment:进程环境空间块的指针,用于设置新进程的环境变量 lpCurrentDirectory:指定新进程的初始工作目录,如果为NULL,则使用与调用进程相同的当前目录