VS2010 - Макро-переменные проекта в аргументах командной строки параметров запуска

В настройках проекта на вкладке «Отладка» есть ли способ использовать переменные макроса проекта в поле аргументов командной строки?

Я знаю, что вы не можете использовать их напрямую, потому что они не расширяются, но есть ли умное решение для этого?

РЕДАКТИРОВАТЬ: Я использую проект C #. Проблема заключалась в том, что моя команда не хотела, чтобы пользователь продукта устанавливал ...

В проекте видеоконференцсвязи, над которым я работал, использовался JMF для захвата видео и звука и их передачи на другую конечную точку. Проблема заключалась в том, что моя команда не хотела, чтобы пользователю продукта приходилось устанавливать JMF.

Я подумал, что, возможно, стоит поделиться нашим решением этой проблемы. Оно работает. Это работает хорошо. Мой вопрос к вам: есть ли у кого-нибудь лучший способ сделать это?

Среда: Windows, XP и выше

  1. Загрузите JMF для Windows
  2. Установите его на свой компьютер

  3. Найдите следующее dll в папке system32 после установки jmf:

    jmacm.dll

    В проекте видеоконференцсвязи, над которым я работал, использовался JMF для захвата видео и звука и их передачи на другую конечную точку. Проблема заключалась в том, что моя команда не хотела, чтобы пользователю продукта приходилось устанавливать JMF.

    Я подумал, что, возможно, стоит поделиться нашим решением этой проблемы. Оно работает. Это работает хорошо. Мой вопрос к вам: есть ли у кого-нибудь лучший способ сделать это?

    Среда: Windows, XP и выше

    1. Загрузите JMF для Windows
    2. Установите его на свой компьютер

    3. Найдите следующее dll в папке system32 после установки jmf:

      jmacm.dll

      В проекте видеоконференцсвязи, над которым я работал, использовался JMF для захвата видео и звука и их передачи на другую конечную точку. Проблема заключалась в том, что моя команда не хотела, чтобы пользователю продукта приходилось устанавливать JMF.

      Я подумал, что, возможно, стоит поделиться нашим решением этой проблемы. Оно работает. Это работает хорошо. Мой вопрос к вам: есть ли у кого-нибудь лучший способ сделать это?

      Среда: Windows, XP и выше

      1. Загрузите JMF для Windows
      2. Установите его на свой компьютер

      3. Найдите следующее dll в папке system32 после установки jmf:

        jmacm.dll
        jmam.dll
        jmcvid.dll
        jmdaud.dll
        jmdaudc.dll
        jmddraw.dll
        jmfjawt.dll
        jmg723.dll
        jmgdi.dll
        jmgsm.dll
        jmh261.dll
        jmh263enc.dll
        jmjpeg.dll
        jmmci.dll
        jmmpa.dll
        jmmpegv.dll
        jmutil.dll
        jmvcm.dll
        jmvfw.dll
        jmvh263.dll
        jsound.dll

      4. Скопируйте dll во временную папку

      5. Найдите файл jmf.properties (выполните поиск на своем компьютере)
      6. Загрузите Исходный код JMF
        В исходном коде найдите следующие файлы:

      JMFinit.java
      JMRPropertiesGen.java
      Registry.java
      RegistryGen.java

      1. Создайте пакет; Я назову его JMFNoInstall
      2. Добавьте файлы, перечисленные на шаге 6
      3. Добавьте класс с именем Main в этот пакет как таковой:

      package JMFNoInstall;
      // add your imports and whatnot here
      public class Main()
      {
          public Main()
          {
              JMFinit.main(null);
              JMFPropertiesGen.main(null);
              Registry.main(null);
              RegistryGen.main(new String[] {
                  new File(".").getAbsolutePath(),
                  "registrylib"
              });
          }
      }
      

      Файл jmf.properties должен находиться в той же папке, что и класс, у которого есть ваш метод main , или в той же папке, что и архив JAR, содержащий метод main .
      dll должны находиться в папке win32 . Вы можете попросить свою программу проверить, находятся ли они в папке win32 . Если это не так, вы можете скопировать их из какого-нибудь места. Файл jmf.properties обновляется при каждом запуске класса Main , указанного выше. Вам нужно запустить это только один раз, когда программа запускается впервые, или если пользователь хочет добавить новые устройства захвата. Наконец, просто убедитесь, что файл jmf.jar и jmfcom.jar , который поставляется вместе с загрузкой Windows JMF, включен в путь к классам. На этом этапе все готово. Вся функциональность JMF без фактической установки.

      С этим действительно не так много работы, и вы можете довольно легко включить его в свой собственный установщик.

      Кто-нибудь нашел лучший способ сделать это? При использовании этого способа есть несколько подводных камней.

      РЕДАКТИРОВАТЬ: Я подумал, что, возможно, стоит поделиться некоторыми кодами, которые я создал. Конечно, вам нужно будет изменить его, чтобы справиться с тем, что вы. Возможно, он не будет компилироваться, но то, что отсутствует, должно быть достаточно легко воссоздать. Но подумал, что это может быть хорошей отправной точкой для помощи людям. Функция detectCaptureDevices, вероятно, поможет большинству людей. Я буду обновлять этот класс по ходу дела.

      
      import GUI.Window;
      import GlobalUtilities.OS;
      import GlobalUtilities.ProgressBar;
      import GlobalUtilities.FileUtilities;
      import java.io.File;
      import java.util.ArrayList;
      import java.util.Vector;
      import javax.swing.text.Utilities;
      
      
      /**
       * This class providex easy access to the most needed info about JMF. You can test
       * a JMF install (Windows only currently) and also get info about the captrue
       * devices hooked up to JMF.
       * @author dvargo
       */
      public class JMFRunner
      {
          /**
           * Show the status of operations
           */
          final ProgressBar theBar = new ProgressBar();
          /**
           * Location where the dll's JMF relies on need to be placed
           */
          final String windowsDllFolder = "C:\\WINDOWS\\system32\\";
      
          final String linuxDllFolder = "/usr/lib/";
      
          /**
           * Dll's that JMF uses
           */
          final String[] windowsDllList = new String[]{
              "jmacm.dll",
              "jmam.dll",
              "jmcvid.dll",
              "jmdaud.dll",
              "jmdaudc.dll",
              "jmddraw.dll",
              "jmfjawt.dll",
              "jmg723.dll",
              "jmgdi.dll",
              "jmgsm.dll",
              "jmh261.dll",
              "jmh263enc.dll",
              "jmjpeg.dll",
              "jmmci.dll",
              "jmmpa.dll",
              "jmmpegv.dll",
              "jmutil.dll",
              "jmvcm.dll",
              "jmvfw.dll",
              "jmvh263.dll",
              "jsound.dll"};
      
          String[] linuxDllList = new String[]{
              "libjmcvid.so",
              "libjmdaud.so",
              "libjmfjawt.so",
              "libjmg723.so",
              "libjmgsm.so",
              "libjmh261.so",
              "libjmh263enc.so",
              "libjmjpeg.so",
              "libjmmpa.so",
              "libjmmpegv.so",
              "libjmmpx.so",
              "libjmutil.so",
              "libjmv4l.so",
              "libjmxlib.so"
          };
      
          String [] dlls= null;
          String dir = null;
      
          /**
           * List of the video capture devices found by JMF
           */
          Vector videoDevices = null;
          /**
           * List of the audio capture devices found by JMF
           */
          Vector audioDevices = null;
      
          public JMFRunner()
          {
              if(OS.isWindows())
              {
                  dlls = windowsDllList;
                  dir = windowsDllFolder;
              }
              else if(OS.isLinux())
              {
                  dlls = linuxDllList;
                  dir = linuxDllFolder;
              }
              else
              {
                  Window.getLogger().severe("Operating system does not support JMF");
              }
      
          }
      
          /**
           * Adds new capture devices
           */
          public void detectCaptureDecives()
          {
      
      
              Thread theTread = new Thread(theBar);
              theTread.start();
              theBar.repaint();
      
              JMFInit.main(new String[] {""});
              JMFPropertiesGen.main(new String[] {""});
              Registry.main(new String[] {""});
              RegistryGen.main(new String[] {"-d",
                  new File(".").getAbsolutePath(),
                  "registrylib"
              });
      
              theBar.setMessage("");
              theBar.stop();
          }
      
          /**
           * Verifies that all the dll's that JMF needs are in their correct spot
           * @return True if all dlls are in their correct spot, false otherwise
           */
          public boolean detectDlls()
          {
              boolean retVal = true;
              String currFile;
              for(String currDll : dlls)
              {
                  currFile = dir + currDll;
                  if(! new File(currFile).exists())
                  {
                      Window.getLogger().severe("Can not find dll " + currFile + " for JMF");
                      retVal = false;
                  }
              }
              return retVal;
          }
      
          //Doesnt work quite yet
          public boolean installLibraryFiles()
          {
              boolean retVal = true;
              String currFile;
              for(String currDll : dlls)
              {
                  currFile = dir + currDll;
                  File newDll = new File(currFile);
                  //see if this dll is already there
                  if(!newDll.exists())
                  {
                      //its not there so lets copy it
                      try
                      {
                          FileUtilities.copy(newDll,FileUtilities.getResourceFile("/JMFManager/Resources/"+currDll,currDll));
                      }
                      catch(Exception e)
                      {
                          retVal =  false;
                      }
                  }
              }
              return retVal;
          }
      
          /**
           * Returns the location of the jmf.properties file that STix is using
           * @return THe locaiton of the JMF properties
           */
          public String getJMFPropertiesFileLocation()
          {
              return Registry.getJMFPropertiesFileLocation();
          }
      
          /**
           * Returns a list of the audio devices found by JMF
           * @return Returns an Arraylist containing info about the audio capture devices
           */
          public ArrayList getAudioDevices()
          {
              DeviceFinder df = new DeviceFinder();
              audioDevices = df.getSoundCaptureDevices();
              return new ArrayList(audioDevices);
          }
      
          /**
           * Returns a list of the video decives deteced by JMF
           * @return returns an arraylist with info of the video capture devices
           */
          public ArrayList getVideoDevices()
          {
              DeviceFinder df = new DeviceFinder();
              videoDevices = df.getVideoCaptureDevices();
              return new ArrayList(videoDevices);
          }
      
      
          public static void main(String [] args)
          {
              JMFRunner x = new JMFRunner();
              //x.detectCaptureDecives();
              x.installLibraryFiles();
              System.out.println(x.detectDlls());
              System.out.println(x.getJMFPropertiesFileLocation());
              System.out.println(x.getAudioDevices());
              System.out.println(x.getVideoDevices());
          }
      }
      
      

      DeviceFinder.java

      
      import java.util.Vector;
      import javax.media.*;
      import javax.media.format.*;
      
      /**
       * this class gets information about capture devices (mics and cameras)
       */
      public class DeviceFinder {
      
          Vector videoDevices = new Vector();
          Vector audioDevices = new Vector();
      
         /**
         * Constructor
         * Creates a new DeviceFinder
         */
         public DeviceFinder()
         {
            /*retrieve ALL video and audio devices*/
            videoDevices = CaptureDeviceManager.getDeviceList(new VideoFormat(null));
            audioDevices = CaptureDeviceManager.getDeviceList(new AudioFormat(null));
         }
      
         /**
         * purpose:  Get information on all Video capture devices on the system
         * @return java.util.Vector 
      a vector of attributes */ public Vector getVideoCaptureDevices() { return videoDevices; } /** * purpose: Get information on all audio capture devices on the system * @return java.util.Vector
      a vector of attributes */ public Vector getSoundCaptureDevices() { return audioDevices; } /** * retrieve the first video capture device */ public CaptureDeviceInfo getPrimaryVideoCaptureDevice() { return (CaptureDeviceInfo)videoDevices.get(0); } /*retrieve the first audio capture device*/ public CaptureDeviceInfo getPrimaryAudioCaptureDevice() { return (CaptureDeviceInfo)audioDevices.get(0); } /** * get the first video device name * @return String
      the name of the video device */ public String getVideoCaptureDeviceName() { return ((CaptureDeviceInfo)videoDevices.get(0)).getName(); } /** * get the first audio device name * @return String
      the name of the audio device */ public String getAudioCaptureDeviceName() { return ((CaptureDeviceInfo)audioDevices.get(0)).getName(); } /** * get the first video device media locator * @return MediaLocator */ public MediaLocator getVideoMediaLocator() { return ((CaptureDeviceInfo)videoDevices.get(0)).getLocator(); } /** * get the first audio device media locator * @return MediaLocator */ public MediaLocator getAudioMediaLocator() { return ((CaptureDeviceInfo)audioDevices.get(0)).getLocator(); } /** * get the video device media locator at index idx * @param idx index of the media locator (0 is the first/default, * as ordered by *
      the JMFRegistry) * @return MediaLocator */ public MediaLocator getVideoMediaLocator(int idx) { if(idx >= videoDevices.size()) { return null; } return ((CaptureDeviceInfo)videoDevices.get(idx)).getLocator(); } /** * get the audio device media locator at index idx * @param idx index of the audio device (as ordered by the JMFRegistry) * @return MediaLocator */ public MediaLocator getAudioMediaLocator(int idx) { return ((CaptureDeviceInfo)audioDevices.get(idx)).getLocator(); } /** * * @param args */ public static void main(String[] args) { DeviceFinder df = new DeviceFinder(); //DEBUG: System.out.println(df.getVideoMediaLocator()); System.out.println(df.getAudioMediaLocator()); } }
13
задан JoshDM 22 August 2019 в 19:17
поделиться