2008-09-17 11 views
5

アプリケーション内の特定の機能を昇格させる方法があるかどうかを調べようとしています。たとえば、レジ​​ストリに格納されているシステム設定とユーザー設定のアプリがあります。システム設定を変更する必要がある場合にのみ、高度を設定する必要があります。Vista UAC、アクセス高度と.Net

私が出会った情報のすべては、昇格した特権で新しいプロセスを開始することについて話しています。

答えて

2

実際に行う必要があるのは、設定をApplication Dataフォルダに保存することです。

3

nice article that covers this hereが見つかりました:

ほとんどのアプリケーションは、実行時に管理者権限を必要としません。アプリケーションが実行中にクロスセッション状態を維持せず、ローカルセキュリティポリシーを変更するようなことをしない場合は、標準ユーザートークンでうまく動作するはずです。場合によっては、アプリケーションの特定の部分に管理者権限が必要な場合があります。これらの部分を別々のプロセスに分ける必要があります。私は少し後にそれに入るでしょう。

この記事ではC++を使用しているようですので、P/Invokeを使用してこのコードを呼び出す方法についてはanother articleが見つかりました。だから.NETからやらなければならない。

+0

参照先のリンクは機能しなくなりました。だからあなたは別のものを知っていますか? – cjbarth

7

私が見た中で最高の資料では、このいずれかになります。

http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx

それは核心まで説明の既存のMicrosoftアプリケーションがプロンプトUACを育てている舞台裏で起こって、いただきました!それを自分で行う、または少なくともあなたがに対するあなたのアップはそれを動作させるために何を知っているかのビット...

+0

本当に素晴らしい記事です。誰もこれを実装する方法についての参照がありますか.Netコード(C#またはVB.Net)? – cjbarth

11

(彼が示し例を注意がC++管理されている)ちょうど1を昇格させることは不可能です富標高レベルはプロセスごとの属性なので、単一のプロセスの他の部分にも適用されます。妊娠と同様に、あなたのプロセスは上昇していてもいなくてもよい。コードの一部を昇格させて実行する必要がある場合は、別のプロセスを開始する必要があります。 Windows SDKの「クロステクノロジー・サンプル」は持っている

HRESULT 
CreateElevatedComObject (HWND hwnd, REFGUID guid, REFIID iid, void **ppv) 
{ 
    WCHAR monikerName[1024]; 
    WCHAR clsid[1024]; 
    BIND_OPTS3 bo; 

    StringFromGUID2 (guid, clsid, sizeof (clsid)/2); 

    swprintf_s (monikerName, sizeof (monikerName)/2, L"Elevation:Administrator!new:%s", clsid); 

    memset (&bo, 0, sizeof (bo)); 
    bo.cbStruct = sizeof (bo); 
    bo.hwnd = hwnd; 
    bo.dwClassContext = CLSCTX_LOCAL_SERVER; 

    // Prevent the GUI from being half-rendered when the UAC prompt "freezes" it 
    MSG paintMsg; 
    int MsgCounter = 5000; // Avoid endless processing of paint messages 
    while (PeekMessage (&paintMsg, hwnd, 0, 0, PM_REMOVE | PM_QS_PAINT) != 0 && --MsgCounter > 0) 
    { 
     DispatchMessage (&paintMsg); 
    } 

    return CoGetObject (monikerName, &bo, iid, ppv); 
} 
3

あなたはCOMオブジェクトとしてあなたの関数を実装することができます場合は、あなたがそれを実行することができますが、このように、高架COMオブジェクトを作成することによって、間接的に上昇しました仰角を必要とするタスク(例:%programfiles%への書き込み)を実行するための管理者プロセスを起動するC#Windows Formsアプリケーションの例を示す「UACDemo」アプリケーション。

これは、独自の機能を作成するのに最適な出発点です。このサンプルを拡張して、.Net RemotingとIPCを使用して、通常のユーザープロセスと高度なプロセスを呼び出すことで、高度な実行可能ファイルを汎用的に維持し、アプリケーション固有のコードをアプリケーション内に実装できます。

+1

上記のサンプルへのリンクは次のとおりです。[http://msdn.microsoft.com/en-us/library/aa970890(v=vs.90).aspx](http://msdn.microsoft.com/ en-us/library/aa970890(v = 90).aspx) – cjbarth

0

私はAydsmanが正しいトラックにいると思います。名前付きパイプのサポートを.NET 3.5に追加すると、子プロセスの上位と通信するための適切なIPCメカニズムが実現します。

関連する問題