我想以编程方式在启用UAC的Windows Vista中创建登录帐户。创建Vista用户帐户
我有一个创建一个用户帐户的OCX,它已经工作了多年的NT和XP,但现在我们的应用程序失败,并访问建立在Vista上的帐户时被拒绝。如果我们的客户关闭UAC,那么安装该应用程序就可以正常工作。但是,在完成配置我们的应用程序之前,让我们的用户关闭UAC和REBOOT是不可接受的。
我想以编程方式在启用UAC的Windows Vista中创建登录帐户。创建Vista用户帐户
我有一个创建一个用户帐户的OCX,它已经工作了多年的NT和XP,但现在我们的应用程序失败,并访问建立在Vista上的帐户时被拒绝。如果我们的客户关闭UAC,那么安装该应用程序就可以正常工作。但是,在完成配置我们的应用程序之前,让我们的用户关闭UAC和REBOOT是不可接受的。
如果你在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中运行(我认为),但具有完全的管理权限。
Here's another article关于部署时处理UAC的问题。已经经历了一些Vista部署问题,我只能对你说,祝你好运。 :)
感谢您的答复。不,它不适用于管理员权限。我可以把这个代码放在我当前的OCX中,对吧?这是否会导致一个diaog出现。请记住,这是一个从网页运行的OCX。 感谢您的帮助。 – LilMoke 2009-04-17 00:12:37