我试图找出是否有任何方法来提升一个特定功能的内部应用程序。例如,我有一个应用程序系统和用户设置储存在登记册,我只需要提升为当的系统设置需要改变。

不幸的是,所有的信息,我们来谈论只有开始一个新的进程提升的权限。

有帮助吗?

解决方案

什么你真的需要做的就是储存设置的应用程序的数据文件夹。

其他提示

这是不可能的提升只是一个函数或其他任何单个过程的一部分,因为提升级别是一个进程属性。就像怀孕,你过程中既可以提高或没有。如果你需要一些部分的运行提高的,则必须启动一个单独的进程。

但是,如果你能实现你的功能作为一个COM目的,你可以跑很高的间接的,通过创建一个高COM目的,是这样的:

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);
}

最好的文章我已经看到的是这个:

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

它解释说下细节问题的什么在幕后的当现有的微软应用程序带来了UAC提示,一点如何自己做的,或至少你会知道你的反对,使其工作...

(注意的例子,他表示管理c++)

发现了一个 不错的文章涵盖了在这里:

大多数应用程序不需要有管理员权限在运行时间。如果应用程序并不保持交会议的国家,同时执行并没有做类似的修改的地方安全政策,应当就好运行的一个标准的用户标记。有时某些部分应用程序将需要管理员权限的,你应该单独出那些片放入一个单独的进程。我会得到这一点之后。

看起来喜欢这篇文章在谈论使用C++,使我找到了 另一篇文章 这涵盖了如何称呼这个代码使用中的P/调用。所以应该是可行的。网。

Windows SDK"跨技术样"有"UACDemo"应用程序,它表示的例子C#窗形式应用程序启动管理员的过程中执行的任务,需要高程(即写到 %programfiles%).

这是一个很好的起点写你自己的功能。我已经扩展这样使用。网远程处理和IPC之间的电话我的用户正常过程中,我提高的过程,可以让我保持高可执行的通用和实施的应用特定代码的应用程序中。

我认为Aydsman是在正确的轨道在这里。与另外的命名管道的支持。净3.5,你有一个体面的IPC机制,用于与高儿童处理。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top