兼容模式运行程序

19 篇文章 0 订阅
2 篇文章 0 订阅

在运行程序时,为了在win Vista以上版本弹出UAC窗口,我们往往设置程序不使用管理员权限打开。因为在程序在一定目录下,不使用管理员运行也是能达到自身的目的(不读写磁盘),但在诸如系统盘下,我们的程序可能就运行的不好,需要管理员权限才能正常运行,但在程序中设置了管理员权限运行,用户电脑没关闭UAC的话,运行又会出现烦人的弹窗。所以,我们可以先判断,如果用户电脑有打开UAC,而且程序运行的在磁盘特定位置,我们就用兼容模式启动程序。

if (IsEnableUAC())
    {
        if (NULL != _tcsstr(szModPath, L"C:\\Windows") || NULL != _tcsstr(szModPath, L"C:\\Program Files") || NULL != _tcsstr(szModPath, L"C:\\Users"))
        {
            HANDLE hToken = NULL;
            GetTokenByName(hToken, L"explorer.exe");
            ImpersonateLoggedOnUser(hToken);

            if (ERROR_SUCCESS == RegCreateKeyEx(HKEY_CURRENT_USER, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE, NULL, &hKey, NULL))
            {
                TCHAR szValue[16] = { 0 };
                DWORD nLen = sizeof(TCHAR)* 16;
                RegQueryValueEx(hKey, szModPath, 0, NULL, LPBYTE(szValue), &nLen);

                if (0 == szValue[0])
                {
                    KillProcessByPath(szModPath);
                    RegSetValueEx(hKey, szModPath, 0, REG_SZ, (BYTE*)L"WINXPSP3", sizeof(TCHAR)* 9);
                }

                RegCloseKey(hKey);
            }
            CloseHandle(hToken);
            RevertToSelf();
        }
    }

 

这样,只是在有开启UAC且在特定磁盘下才会以管理员的模式运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值