我想以編程方式在啓用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