WIN7 程序运行和管理员相关的各种问题解决方式
2012-03-06 20:09
323 查看
win7的管理员问题,实在是恶心,下面总结了WIN7下以管理员运行的方式:
A、 每次用户都右键菜单使用管理员权限运行程序,行情客户端就没有问题
原因:不用解释了吧!呵呵。
B、 客户端不要安装在系统盘Program Files下
原因:这样就可以避免只有管理员权限才可以写入文件的问题
C、 修改客户端,迁移程序数据
原因:这样就可以避免只有管理员权限才可以写入文件的问题
D、 修改客户端,编译成使用admin权限运行
原因:编译器链接有调用者选项 (asInvoker、highestAvailable、requireAdministrator),这里可以选择requireAdministrator
E、 修改注册表:
原因:在(HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers下新建一个键 键名为主程序全路径,值为RUNASADMIN
F、 默认从update启动Main.exe
原因:因为VISTA以后的WINDOWS会根据程序的文件名判断是不是需要管理员权限去运行,比如带有updae和install之类的名称的话,WINDOWS会自动认为需要管理员权限运行,这样通过update之类的文件启动主程序的话,主程序就会拥有管理员权限了。
G、主程序自己启动自己
原因:主程序可以先以普通权限运行,然后通过在启动自己,这时要求管理员权限运行,然后退出前面普通权限运行的程序。这个在开机自动启动是很好的解决方案。例如:
if ((!lpstrCmdLine || !lpstrCmdLine[0]) && UI::GetOSVertion().dwMajorVersion >= 6) {
//VISTA WIN7 需要使用管理员权限
TCHAR szPath[MAX_PATH] = {0};
::GetModuleFileName(NULL, szPath, MAX_PATH);
TCHAR szWorkDirectory[MAX_PATH];
StrCpy(szWorkDirectory, szPath);
PathRemoveFileSpec(szWorkDirectory);
SHELLEXECUTEINFO SEE = {0};
SEE.cbSize = sizeof(SHELLEXECUTEINFO);
SEE.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
SEE.lpFile = szPath;
SEE.lpVerb = TEXT("runas");
SEE.lpDirectory = szWorkDirectory;
SEE.lpParameters = TEXT("-uac");
ShellExecuteEx(&SEE);
bRunNormal = FALSE;
} else if (!_tcsicmp(lpstrCmdLine, _T("-update"))) {//
nRet = Update(lpstrCmdLine, nCmdShow);
bRunNormal = FALSE;
} else if (!_tcsicmp(lpstrCmdLine, _T("-uac"))) {//
//vista and win7 ranas admin mode.
//ran as admin normal bRunNormal = TRUE
}
A、 每次用户都右键菜单使用管理员权限运行程序,行情客户端就没有问题
原因:不用解释了吧!呵呵。
B、 客户端不要安装在系统盘Program Files下
原因:这样就可以避免只有管理员权限才可以写入文件的问题
C、 修改客户端,迁移程序数据
原因:这样就可以避免只有管理员权限才可以写入文件的问题
D、 修改客户端,编译成使用admin权限运行
原因:编译器链接有调用者选项 (asInvoker、highestAvailable、requireAdministrator),这里可以选择requireAdministrator
E、 修改注册表:
原因:在(HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers下新建一个键 键名为主程序全路径,值为RUNASADMIN
F、 默认从update启动Main.exe
原因:因为VISTA以后的WINDOWS会根据程序的文件名判断是不是需要管理员权限去运行,比如带有updae和install之类的名称的话,WINDOWS会自动认为需要管理员权限运行,这样通过update之类的文件启动主程序的话,主程序就会拥有管理员权限了。
G、主程序自己启动自己
原因:主程序可以先以普通权限运行,然后通过在启动自己,这时要求管理员权限运行,然后退出前面普通权限运行的程序。这个在开机自动启动是很好的解决方案。例如:
if ((!lpstrCmdLine || !lpstrCmdLine[0]) && UI::GetOSVertion().dwMajorVersion >= 6) {
//VISTA WIN7 需要使用管理员权限
TCHAR szPath[MAX_PATH] = {0};
::GetModuleFileName(NULL, szPath, MAX_PATH);
TCHAR szWorkDirectory[MAX_PATH];
StrCpy(szWorkDirectory, szPath);
PathRemoveFileSpec(szWorkDirectory);
SHELLEXECUTEINFO SEE = {0};
SEE.cbSize = sizeof(SHELLEXECUTEINFO);
SEE.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
SEE.lpFile = szPath;
SEE.lpVerb = TEXT("runas");
SEE.lpDirectory = szWorkDirectory;
SEE.lpParameters = TEXT("-uac");
ShellExecuteEx(&SEE);
bRunNormal = FALSE;
} else if (!_tcsicmp(lpstrCmdLine, _T("-update"))) {//
nRet = Update(lpstrCmdLine, nCmdShow);
bRunNormal = FALSE;
} else if (!_tcsicmp(lpstrCmdLine, _T("-uac"))) {//
//vista and win7 ranas admin mode.
//ran as admin normal bRunNormal = TRUE
}
相关文章推荐
- Win7如何提升为管理员权限,如何开机启动需要管理员权限的程序,解决win7开机不能自动运行的问题等
- Win7如何提升为管理员权限,如何开机启动需要管理员权限的程序,解决win7开机不能自动运行的问题等
- Win7如何提升为管理员权限,如何开机启动需要管理员权限的程序,解决win7开机不能自动运行的问题等
- win7下运行Excel2007,出现“向程序发送命令时出现问题”的解决
- 解决VC++在WIN7下使用ADO方式连接ACCESS数据库到XP不能运行的问题
- 解决Win7系统下以管理员身份运行的程序接收不到拖放文件消息[WM_DROPFILES]问题的方法
- 如何解决VB6程序在Win7不能运行的问题~
- win7下搭建node.js环境,并解决expressexpress不是内部或外部命令,也不是可运行的程序或批处理文件的问题
- .解决带迅盘的机器WIN7关机速度慢的问题(去掉 ReadyBoost),怎样用询盘加速程序运行(装turbo momery dashboard)
- 关于各种文件用Editplus的方式打开出现“向程序发送命令时出现问题”的解决方法
- 关于winXP和win7,vs2010,opencv2.3,运行程序,报错“计算机丢失tbb_debug.dll”问题解决办法 .
- 解决WIN7-64,VS2008编译的MFC程序在WIN7-32/XP上不能运行的问题
- Win7 VS2010下开发的CS软件,安装到XP下无法运行或者桌面快捷方式无法显示图标的问题解决方法
- 关于各种文件用Editplus的方式打开出现“向程序发送命令时出现问题”的解决方法
- win7下运行Excel2007,出现“向程序发送命令时出现问题”的解决
- WIN7上搭建Windows Phone 8 开发环境——VMware Workstation下Win8 “无法安装Hyper-V, 某个虚拟机监控程序正在运行”问题解决的办法
- 一个解决adb5037端口被绑定问题的小程序-以管理员身份运行
- 解决系统下以管理员身份运行的程序接收不到拖放文件消息[WM_DROPFILES]问题的方法
- 解决VC++在WIN7下使用ADO方式连接ACCESS数据库到XP不能运行的问题
- 【原】win7下运行Excel2007,出现“向程序发送命令时出现问题”的解决