您的位置:首页 > 其它

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

 }

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐