1

我想以编程方式在启用了 UAC 的 Windows Vista 中创建登录帐户。

我有一个创建用户帐户的 OCX,它已经在 NT 和 XP 上工作了多年,但现在我们的应用程序在 Vista 上创建帐户时因访问被拒绝而失败。如果我们的客户关闭 UAC,然后设置该应用程序,它就可以正常工作。但是,在完成配置我们的应用程序之前让我们的用户关闭 UAC 并重新启动是不可接受的。

4

2 回答 2

1

如果您在 Vista 中以管理员权限运行您的应用程序,那么它可以工作吗?

您还可以使用以下代码创建具有提升权限的 COM 对象:

HRESULT __stdcall CreateElevatedComObject(HWND hwnd, REFCLSID rclsid, REFIID riid, __out IUnknown ** ppv)
{
    OSVERSIONINFO ver={sizeof(ver)};
    if (GetVersionEx(&ver) && ver.dwMajorVersion > 5)
    {
        BIND_OPTS3 bo;
        WCHAR wszCLSID[50];
        WCHAR wszMonikerName[300];

        if (StringFromGUID2(rclsid, wszCLSID, ELEMENTS(wszCLSID)))
        {
            HRESULT hr = StringCchPrintf(wszMonikerName,
                ELEMENTS(wszMonikerName),
                L"Elevation:Administrator!new:%s",
                wszCLSID);
            if (FAILED(hr))
                return hr;
            memset(&bo, 0, sizeof(bo));
            bo.cbStruct = sizeof(bo);
            bo.hwnd = hwnd;
            bo.dwClassContext  = CLSCTX_LOCAL_SERVER;
            return CoGetObject(wszMonikerName, &bo, riid, (void **)ppv);
        }
        return E_FAIL;
    }
    else
        return ::CoCreateInstance(rclsid,NULL,CLSCTX_ALL,riid,(void**)ppv);
}

在 UAC 下运行,它将显示一个海拔对话框。该对象将在 dllhost 中耗尽进程(我认为),但具有完整的管理员权限。

另请参阅Vista 中 UAC 的分步指南

于 2009-04-17T00:08:41.143 回答
1

这是另一篇关于在部署时处理 UAC 的文章。已经经历了一些 vista 部署问题,我只能对你说祝你好运。:)

于 2009-04-17T00:13:05.267 回答