Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Windows

Как узнать, из какой директории запускается exe-файл? : Windows

25.04.2024 14:38


03.12.2015 09:32
OlegON
 
Подскажите, пожалуйста, есть ли аналог Linux-команды wich в Windows?
Не могу пробиться через кашу дебильных сайтов в поисковой выдаче.
Задача определить, из какой директории запускается программа, если она запускается без прямого пути. Т.е. она где-то в %PATH%, например, вопрос, где? Программа не моя, соответственно, посмотреть из кода не могу.
03.12.2015 09:43
OlegON
 
Имеется ввиду не текущая директория, а директория, где лежит exe программы.
03.12.2015 10:15
student
 
если процесс запущен - то можно через wmi
что то типа такого

string processName = "calc.exe";
string currentUser = WindowsIdentity.GetCurrent().Name.Split('\\')[1];

string query = "Select * from Win32_Process Where Name = \"" + processName + "\"";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
ManagementObjectCollection processes = searcher.Get();

foreach (ManagementObject proc in processes)
{
string owner;
string[] argList = new string[] { string.Empty };
int returnVal = Convert.ToInt32(proc.InvokeMethod("GetOwner", argList));
if (returnVal == 0)
owner = argList[0];
else
continue;

if (owner != currentUser)
continue;

// Вот тут-то и остался только нужный процесс!
string path = proc["ExecutablePath"].ToString();
}


пы сы
сам не пробовал :)
03.12.2015 10:18
vdm
 
Есть в Win2003 и должно быть везде выше.

Код:
D:\>where /?                                                                 
                                                                             
WHERE [/R каталог] [/Q] [/F] [/T] шаблон...                                  
                                                                             
Описание:                                                                    
    Отображает расположение файлов, совпадающих с шаблоном поиска.           
    По умолчанию поиск выполняется в текущем каталоге и в каталогах,         
    указанных в переменной среды PATH.                                       
                                                                             
Параметры:                                                                   
    /R       Рекурсивный поиск и отображение файлов, соответствующих         
             указанному шаблону, начиная с указанного каталога.              
                                                                             
    /Q       Возврат только кода выхода без отображения списка               
             найденных файлов (автоматический режим)                         
                                                                             
    /F       Отображение найденных файлов в кавычках.                        
                                                                             
    /T       Отображение размера, даты и времени изменения для всех          
             найденных файлов.                                               
                                                                             
    шаблон   Шаблон поиска для искомых файлов.                               
             В шаблоне можно использовать подстановочные знаки * и ?.        
             Также можно задавать конструкции "$пер:шаблон" и "путь:шаблон", 
             где "пер" представляет переменную среды, и                      
             поиск осуществляется по путям, указанным в переменной           
             среды "пер". Эти конструкции не следует использовать            
             с параметром /R. При поиске к шаблону также                     
             добавляются расширения из переменной PATHEXT.                   
                                                                             
     /?      Вывод справки по использованию.                                 
                                                                             
  Примечание. Эта служебная программа возвращает код ошибки 0, если          
              поиск был успешным, 1 - если безуспешным, и                    
              2, если возникли ошибки.                                       
                                                                             
Примеры:                                                                     
    WHERE /?                                                                 
    WHERE имя_файла1 имя_??????.*                                            
    WHERE $windir:*.*                                                        
    WHERE /R c:\windows *.exe *.dll *.bat                                    
    WHERE /Q ??.???                                                          
    WHERE "c:\windows;c:\windows\system32:*.dll"                             
    WHERE /F /T *.dll
Проверил, также есть в Win7 и Win2012.
03.12.2015 10:22
grannie
 
Process Explorer из Sysinternals Suite (только не говори, что не знаешь что это такое и не хочешь ставить "лишнее" ) - в виде GUI. Из командной строки, наверное, тоже там что-то есть для этого.
03.12.2015 10:34
student
 
проще всего для запущенного заюзать у себя апи



DWORD WINAPI GetModuleFileNameEx(
_In_ HANDLE hProcess,
_In_opt_ HMODULE hModule,
_Out_ LPTSTR lpFilename,
_In_ DWORD nSize
);

hModule [in, optional]
A handle to the module. If this parameter is NULL, GetModuleFileNameEx returns the path of the executable file of the process specified in hProcess.
03.12.2015 10:55
OlegON
 
Извините за неполную постановку задачи, программа еще не запущена. API недоступно, т.е. это определение запускаем из cmd и до запуска надо понять, откуда она запускается, т.е. саму программу никто стартовать не будет, но надо понять, откуда она будет запущена... Утилитки Руссиновича, конечно, знаю, но тут, действительно, лишнее упирается в то, что решение должно работать в разных местах, в т.ч., где ничего из этих утилит нет. Ближе всех попал vdm, спасибо. Похоже, что искомое -
Код:
where program.exe
и вывод усечь до первой строки... Убожество...
03.12.2015 11:14
vdm
 
Для WinXP частичный аналог where:
Код:
for %i in (program.exe) do @echo.%~$PATH:i
03.12.2015 11:55
OlegON
 
Это как раз более правильное решение, поскольку не требует отрубания лишних строк.
Часовой пояс GMT +3, время: 14:38.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.