Не могу запустить файл от имени администратора, но ОК, если я запускаю от имени обычного пользователя

РЕДАКТИРОВАТЬ: Пробовал это: C:\WINDOWS\system32>runas /user:gabs-pc\gabs-pc "J:\TI\...\Editor_PDF\editor_pdf.exe"

Получил эту ошибку: Системе не удалось найти указанный файл.

Довольно сложно изложить свою проблему в названии темы...

Что ж... У меня есть файл .exe, который я хочу запустить, этот файл находится на общем жестком диске через локальную сеть с именем J:\.

Если я открою приглашение cmd как обычный пользователь по заданному пути и попытаюсь выполнить файл .exe, используя, например:

"J:\TI\Estágio\gabriel\Editor de PDF\Editor PDF\editor_pdf.exe" param1 param2 param3

Это работает нормально. Но когда я пытаюсь запустить тот же самый файл с того же компьютера, открывая командную строку cmd в качестве администратора, я получаю следующую ошибку:

«J:\TI...\Editor PDF\editor_pdf.exe» не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл.

Я хотел бы знать, как выполнить этот файл от имени администратора ИЛИ однострочный обходной путь для запуска этого файла от имени текущего/обычного пользователя.

Комментарии. Если некоторые из вас спрашивают себя, почему бы вам просто не открыть cmd как обычный пользователь? Я пытаюсь вызвать эту программу из другой программы, которая может запускать cmd только от имени администратора, вот почему.


person Gabriel Belini    schedule 21.07.2017    source источник
comment
this file is in a shared hard drive - общие диски предназначены для каждого пользователя - пользователь с правами администратора не может просматривать общие диски обычных пользователей и наоборот   -  person RbMm    schedule 21.07.2017
comment
Локальный администратор не имеет прав администратора на сетевые файлы, если это домен Windows, тогда вам необходимо иметь права администратора домена   -  person maytham-ɯɐɥʇʎɐɯ    schedule 21.07.2017


Ответы (1)


Сначала вам нужно преобразовать путь сетевого диска в его реальный путь UNC. Как говорит @RbMm, сетевой диск — это конфигурация для каждого использования.

Если вы придерживаетесь cmd, вы можете использовать wmic path win32_mappedlogicaldisk get DeviceID, ProviderName для получения реального пути к цели.

Вы также можете использовать Winapi WNetGetConnection для получения пути к диску.

Этот процесс должен НЕ выполняться в контексте администратора. Если вы не можете, вам нужно использовать CreateProcessAsUser для получения информации с точки зрения другого пользователя.

Псевдокод:

char path[260] = {0};
WNetGetConncetion ("J:", path, 260);
WinExec ("\"" + path + "\\TI\\Estágio\\gabriel\\Editor de PDF\\Editor PDF\\editor_pdf.exe"
       + "\" " + param1 + " " + param2 + " " + param3, SW_HIDE);

Дополнительная информация:

person Keyu Gan    schedule 21.07.2017