ProgrammingEnthusiast Ответов: 3

Как получить путь установки приложения


я хочу знать, есть ли встроенный или самый быстрый способ получить путь установки приложения. например, я установил новое программное обеспечение (VLC), я хочу знать, есть ли встроенная функция, которая ищет или извлекает путь установки или местоположение его exe-файла. я использую visual studio 2013

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

я думаю о том, чтобы поискать в каждой папке на моем компьютере, а затем перейти к каждой подпапке, чтобы найти "app.exe-файл.

3 Ответов

Рейтинг:
2

Garth J Lancaster

У меня есть ситуация, когда мне нужно быть уверенным, что на клиентской машине установлено "что-то", которое может отображать PDF-файлы ... мне все равно, что это такое, то есть Acrobat, Foxit ... этот метод может работать, но связан с предположением, что ничто другое не "взломало " расширение". pdf "в моем случае - в вашем случае расширение будет iirc". vlc"


public enum AssociationStr
{
  Command = 1,
  Executable,
  FriendlyDocName,
  FriendlyAppname,
  NoOpen
}


и

[Flags]
public enum AssociationFlags
{
  Init_NoRemapCLSID = 0x01,
  Init_ByExeName = 0x02,
  Init_DefaultToStar = 0x04,
  Init_DefaultToFolder = 0x08,
  NoUserSettings = 0x10,
  NoTruncate = 0x20,
  Verify = 0x40,
  RemapRunDll = 0x80,
  NoFixUps = 0x100,
  IgnoreBaseClass = 0x200
}


затем с

[DllImport("Shlwapi.dll". CharSet = CharSet.Auto, SetLastError = true)]
static extern uint AssocQueryString(AssociationFlags flags, AssociationStr str, string pszAssoc, string pszExtra, [Out] StringBuilder sOut, [In][Out] ref uint nOut);


вы можете сделать :-

public static string GetAssociatedExecutable(string docType)
{
  string tmpAssocExe = FileInfoByExtension(AssociationStr.Executable, docType;
  return tmpAsocExe;
}

public static string FileInfoByExtension(AssociationStr assocStr, string docType)
{
  uint pcchOut = 0;
  if (AssocQueryString(AssociationFlags.Verify, assocStr, docType, null, null, ref pcchOut) != 1)
    return null;

  StringBuilder pszOut = new StringBuilder((int)pcchOut);
  if (AssocQueryString(AssociationFlags.Verify, assocStr, docType, null, pszOut, ref pcchOut) != 0)
    return null;

  return pszOut.ToString();
}


Я вручную перепечатал это с моей машины разработчика, которая на данный момент отключена от сети (я печатаю на своем Mac), так что если есть какие-либо ошибки, сделайте Google для pinvoke AssocQueryString, и вы можете получить информацию - я думаю, что она изначально пришла из StackOverflow

О, если это не очевидно

// Usage
string whatRunsVLC = GetAssociatedExecutable(".vlc");


(Я думаю, что разделил "исполняемый файл" на его собственную функцию, потому что у меня также есть его вариант, чтобы получить DDEApplication)

[редактировать]
потребности
using System.Runtime.InteropServices;
где вы кладете "хорошие биты" этого [/edit]


Рейтинг:
1

RossMW

Воспользуйся

Dim appPath As String = Application.StartupPath()

или

Dim exePath As String = Application.ExecutablePath()


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


ProgrammingEnthusiast

Приложение.StartupPath() и приложение.ExecutablePath()
извлекает только путь к файлу моего приложения. то, что я хочу сделать, это: отобразить путь к исполняемому файлу. например, я хочу отобразить путь к приложению под названием: sublime_text.exe

затем он отобразит путь установки этого exe-файла, который выглядит следующим образом: C:\Program файлы\Sublime Text 3

Рейтинг:
1

ProgrammingEnthusiast

Application.StartupPath() and Application.ExecutablePath()
извлекает только путь к файлу моего приложения. то, что я хочу сделать, это: отобразить путь к исполняемому файлу. например, я хочу отобразить путь к приложению под названием: sublime_text.exe

затем он отобразит путь установки того exe-файла, который является: C:\Program Файлы\Sublime Text 3