我希望以编程方式在启用了UAC的Windows Vista中创建登录帐户。
我有一个创建用户帐户的OCX,它在NT和XP上工作了多年,但现在我们的应用程序在Vista上创建帐户时因访问被拒绝而失败。如果我们的客户关闭UAC然后设置该应用程序它工作正常。但是,在完成配置我们的应用程序之前让我们的用户关闭UAC和重新启动是不可接受的。
答案 0 :(得分: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(我认为)中耗尽进程但具有完全管理员权限。
答案 1 :(得分:1)
Here's another article。已经完成了一些远景部署问题,我只能对你说好运。 :)