Member 12680324 Ответов: 1

Как запустить код от имени администратора, но " некоторые приходят нормально


мое приложение запускается от имени администратора, но не может корректно работать с каким-то кодом, потому что они должны работать в обычном пользовательском режиме, как можно его переключить

Что я уже пробовал:

private bool runNormal()
{
    try
    {
        //Do Somthing normal , if run by admin it dosen't work
        return true;
    }
    catch { return false; }
}
private bool runAdmin()
{
    try
    {
        //Do Somthing advance, if run by NormalUser it dosen't work
        return true;
    }
    catch { return false; }
}
public void StartMainProcess()
{
    if (runNormal() && runAdmin())
    {
        //continue to next step
    }
}

johannesnestler

это звучит немного странно-администратор имеет меньше прав на выполнение работы, чем обычный пользователь? Можете ли вы назвать какое-либо приложение, в котором вы видели подобное поведение? Если я сталкиваюсь с такими "требованиями WTF", я всегда отступаю назад и задаюсь вопросом, что я делаю... только мой 2С...

Member 12680324

Да, с чем-то вроде этого

private bool runNormal()
{
    try
    {
        //Do Somthing normal , if run by admin it dosen't work
        ////Map Network Driver for user

    }
    catch { return false; }
}
private bool runAdmin()
{
    try
    {
        //Do Somthing advance, if run by NormalUser it dosen't work
        //Unlock Folder Form Deny Everyone To acessWrite
        //Ex. "C:// Programs file" or "%UserProfile%\Download"        
        //Unlock User Folder to possible for Write
    }
    catch { return false; }
}
public void StartMainProcess()
{
    if (runNormal() && runAdmin())
    {
        //Afert Unlock UserFile, 
        //Afert Map Network Drive
        //Continue to tranfer all file form mapped NW. Drive
        //To unlocked Folder
        // then Lock folders again (byadmin)
        // and remove network drive (byuser)
        // Finally User can only read and excute folder
    }
}

Dave Kreskowiak

Ваш вопрос немного задом наперед. Вы ничего не сказали о том, почему вы думаете, что вам нужно это сделать, просто что вам нужно это сделать. Так бывает редко. Почему вы думаете, что вам нужно это решение и что вы на самом деле делаете в этом приложении?

Member 12680324

Извините за это, мое приложение о самолете, чтобы получить доступ ко всем папкам и файлам пользователя, перечислить их и отправлять на NAS каждый день, чтобы просмотреть, что происходит, изменения событий программ в их машине, историю веб-браузера. и передавать работу пользователя (и т. д. doc, xlm, mp4 mp3 jpeg и другие носители) хранить в NAS и получать какой-то файл в NAS обратно к ним,

Может быть
1. Подключить сетевой диск
2. доступ и разблокировка некоторых пользовательских папок
3. передача файла. Отправить, Получить
4. Наконец, заблокируйте папку, отключите подключенный сетевой диск


Dave Kreskowiak

Что вы подразумеваете под "разблокировкой какой-то пользовательской папки" и с какой целью?

Что вы подразумеваете под "передачей файла, отправкой, получением"? Для какого сервера и с какой целью?

Member 12680324

аналогично тому, если ваша попытка в cmd
"icacls / deny everyone:W "
если вы бежите как Номал пользователя получили доступ запретить

"объем использования N: \\НАН\publicEveryday /пользователей:сотрудник "
если вы будете работать от имени администратора, то получите неправильный результат

1 Ответов

Рейтинг:
0

#realJSOP

Сначала вы должны проверить, находятся ли они в роли администратора.

using System.Security.Principal;

public static bool IsAdmin()
{
    WindowsIdentity  identity  = WindowsIdentity.GetCurrent();
    WindowsPrincipal principal = new WindowsPrincipal(identity);
    return principal.IsInRole(WindowsBuiltInRole.Administrator);
}


IMHO, вы должны разделить код администратора в другую библиотеку DLL и вручную загрузить его, если - и только если-пользователь находится в роли администратора.

То, как вы распределяете код для различных ролей пользователей, - это упражнение, которое я оставляю вам.