1

UAC が有効になっている Windows Vista で、ログオン アカウントをプログラムで作成したいと考えています。

ユーザー アカウントを作成する OCX があり、NT と XP で何年も機能していましたが、Vista でアカウントを作成すると、アプリケーションが Access Denied で失敗します。お客様が 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 に答える