C++/MFC如何启动另一个应用无法正常启动程序并获取其进程

版权声明:本文为博主原创文章,未经博主允许不得转载。 如果转载,需要获得作者授权。保留追究法律责任的权力。 /chinabinlang/article/details/6461404

在win7 上运行程序,经常需要管理员权限,如何让自己编写的程序启动的时候获取管理员权限呢?方法如下:

1: 在VS2010中,可以参考《VS2010与Win7共舞:UAC与数据重定向》这篇文章,为了方便,这里复制过来:

  凡事都没有绝对。如果因为一些特殊的要求(众所周知,客户的要求千奇百怪,无奇不有),我们一定要向“Program Files”目录写入数据,这时该怎么办呢?面对这种极其特殊的情况,我们可以在应用程序的Manifest禁用UAC Virtualization,取消其对数据写操作的重定向。在项目属性中,我们设置启用UAC(Enable User Account Control),并且在UAC Execution Level中设置请求管理员权限。这样,应用程序在启动的时候,就会向用户请求管理员权限,当应用程序获得管理员执行权限后,当然可以向任意目录写入数据,UAC

  对于64位应用程序,本身是不具备UAC Virtualization机制的,所以根本不存在禁用的问题。当我们在64位应用程序中尝试向“Program Files”等敏感目录写入数据时,就会遇到一个“拒绝访问”的错误:

  当这段代码执行到创建文件夹的时候,会遇到一个“拒绝访问”错误:

  图3  创建文件夹的“拒绝访问”错误

  为了避免这个错误,同样的,我们可以通过在项目属性中设置,使得Manifest中嵌入UAC相关的信息,在应用程序启动的时候请求管理员权限,就像我们在运行其他大多数需要管理器权限的应用程序一样。当应用程序获得管理员权限后,这个错误就不存在了。但是这里必须要指出,这种做法是不太的,能够避免尽量避免。

按照上述文章,VS2010编写的程序可以运行时获取管理员权限;

但是如果是VS2010以前的程序呢?

方法1:当然是移植到VS2010上了;

方法2:(这才是要说的):

(2)随便复制一个 .manifest 文件到你现在的工程目录的资源文件夹(res)下,然后在工程的资源中Import这个文件;

(3)资源文件夹设置为“24”,资源ID设置为“1”;

现在ok了,你编译的程序,可以获取管理员权限了。

用一下这个函数就可以启动其他程序以管理员权限,当然可以自己启动自己

  1. VS无法启动程序,“。。。。.exe”。系统找不到指定文件。如图1;

2.修改项目的名称(如图2,在项目名称重命名前面添加“H”);

3.再调试运行,发现结果如图3;

4.然后打开菜单栏项目->属性,如图4;

5.接着打开配置属性->链接器->常规->输出文件,如图5;

6.然后打开你代码文件夹下的Bin文件夹,文件夹下肯定有NOEMHost.exe的可执行文件,如图6;

7.接着将其删除,如图7;

8.再返回VS,运行程序,然后再次查看文件夹下的Bin文件夹,肯定又生成了NOEMHost.exe的可执行文件,如图6。因此我们发现配置属性->链接器->常规->输出文件的路径及其后面的名称是程序运行生成的exe文件的路径和名称。因此修改其输出文件的名字为项目名称.exe,即HOEMHost.exe,如图8;

9.再次调试运行,查看结果如图9;

10.这样我们就搞清楚了输出文件的路径和文件名的修改,结合第一点,即图2的提示,找到对应的输出目录,如图10;

11.发现图2运行错误的提示路径很像,我猜想这个路径是告诉VS怎么找到生成的可执行文件,即HOEMHost.exe在哪里,于是修改其路径,改为Bin,如图11。注意不要修改成.\Bin\HOEMHost.exe,这样会在Bin文件夹下生成HOEMHost.exe名称的文件夹调试运行,成功。

电脑程序常见问题及解决方法:

现象:电脑在正常运行过程中,突然自动关闭系统或重启系统。 

现象分析:现今的主板对CPU有温度监控功能,一旦CPU温度过高,超过了主板BIOS中所设定的温度,主板就会自动切断电源,以保护相关硬件。另一方面,系统中的电源管理和病毒软件也会导致这种现象发生。 

当之策:上述突然关机现象如果一直发生,先确认CPU的散热是否正常。开机箱目测风扇叶片是否工作正常,再进入BIOS选项看风扇的转速和CPU的工作温度。发现是风扇的问题,就对风扇进行相关的除尘维护或更换质量更好的风扇。如果排除硬件的原因,进入系统,从“吻到死”的安装光盘中覆盖安装电源管理,再彻底查杀病毒。当这些因素都排除时,故障的起因就可能是电源老化或损坏,这可以通过替换电源法来确认,电源坏掉就换个新的,切不可继续使用,会烧毁硬件的。

现象:桌面被锁定,鼠标不能动,严重时连热启动(ALT+CTRL+DEL)都不行。还有就是蓝屏现象。 

现象分析:“吻到死”系统自身的BUG以及各软件间的兼容性问题是该故障的原因,也可能是用户同一时间运行了过多的大程序,从而导致进程阻塞,引发当机。 

应对之策:当机分2种,真当和假当,二者区分的最简单方法是按下小键盘区的Numlock键,观察其指示灯有无变化。有,则假当;反之,真当。假当可以同时按下ALT+CTRL+DEL在出现的任务列表里选定程序名后标注没有响应的项,单击结束任务。真当,只有冷启动了。对于蓝屏,在按下ESC键无效后,选择重启,按机箱面板上的复位键。对于兼容性问题,可以从卸载“问题”软件和更新主板BIOS和相关主板驱动程序上来解决。

那种可以自定义控件的窗口叫做 Dialog 对话框。

1)在资源视图添加一个对话框资源,根据需要将工具栏中的控件布局到对话框上

2)在解决方案视图右键新添类-》选择MFC类-》基类选择 CDialog 并制定使用的Dialog 资源

3)在你程序的事件中生成该类一个对象,调用其 DoModal() 方法即可,注意添加对应的头文件。

谢谢你的回答。
这种对话框我会做,我要弹出的是那种类似主窗口的界面,就是要有菜单栏,工具栏等,可以像主窗口那样添加“menu”,“toolbar”之类的。不知道这样的能否实现?
再次感谢。

简单,建立基于 CFormView 的 单文档程序即可。

1)新建 MFC 程序,选择单文档

2)在向导的最后一步,选择基于 CFormView

3)编辑 Dialog 资源,添加控件,处理事件

非常感谢,能否加个Q,?希望还可以向你请教
不客气,工作原因,Q 一般都无法在线。有问题提问通知下我即可。
好的,那新建的这个窗口与原窗口怎么连接呢?就是怎么通过原窗口的一个按钮控件调出新建的窗口?
这个例子里这就是主窗口,如果你想在程序里生成这样的主窗口,你需要
1)资源里添加对话框
2)工程里添加MFC类,资源里指定使用该对话框作为类的资源
3)在该类中通过代码动态添加菜单和工具栏
4)主窗口里生成类的实例,然后 ShowWindow 即可

我要回帖

更多关于 380交流接触器实物接线 的文章

 

随机推荐