2013-06-08 5 views
0

Я использовал innosetup для установки своего приложения. Все файлы, например в программных файлах \ тест В каталоге у меня есть файл с расширением .exe моей программы, а также ffmpeg.exeКак установить каталог, где было установлено мое приложение?

Теперь в моем коде я сделал:

class Ffmpeg 
    { 
     NamedPipeServerStream p; 
     String pipename = "mytestpipe"; 
     byte[] b; 
     System.Diagnostics.Process process; 
     string ffmpegFileName; 
     string workingDirectory; 

     public Ffmpeg() 
     { 
      workingDirectory = Path.GetDirectoryName(Application.LocalUserAppDataPath) + @"\workingDirectory"; 
      ffmpegFileName = @"\ffmpeg.exe"; 
      if (!Directory.Exists(workingDirectory)) 
      { 
       Directory.CreateDirectory(workingDirectory); 
      } 
      ffmpegFileName = workingDirectory + ffmpegFileName; 
      Logger.Write("Ffmpeg Working Directory: " + ffmpegFileName); 
     } 

     public void Start(string pathFileName, int BitmapRate) 
     { 
      try 
      { 
       string outPath = pathFileName; 
       Logger.Write("Output Video File Directory: " + outPath); 
       Logger.Write("Frame Rate: " + BitmapRate.ToString()); 
       p = new NamedPipeServerStream(pipename, PipeDirection.Out, 1, PipeTransmissionMode.Byte); 
       b = new byte[1920 * 1080 * 3]; // some buffer for the r g and b of pixels of an image of size 720p 

       ProcessStartInfo psi = new ProcessStartInfo(); 
       psi.WindowStyle = ProcessWindowStyle.Hidden; 
       psi.UseShellExecute = false; 
       psi.CreateNoWindow = true; 
       psi.FileName = ffmpegFileName; 
       psi.WorkingDirectory = workingDirectory; 

Тхеп РОБЛЕМА является что каталог workDirectory не содержит ffmpeg.exe после установки. поэтому, если пользователь будет запускать первый раз после установки, файл будет отсутствовать.

Я добавил ffmpeg.exe к моему проекту и установить его: Материалы и Copy всегда

Что я хочу сделать то, что каким-то образом установить WorkingDirectory к месту, где пользователь устанавливал программу, если это файл программы или любой другой каталог.

Или установить файл workigDirectory в файл ffmpeg.exe, который уже добавлен в проект.

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

+0

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

+0

Я думаю, что вы не создали свой установочный пакет правильно. Рабочий пакет установки будет настолько полным, что пользователь ничего не должен делать. После установки в меню «Пуск» есть несколько ярлыков, и именно там ваш пользователь может найти, как запустить приложение. –

ответ

1

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

string fullPath = System.Reflection.Assembly.GetExecutingAssembly().Location; 
string installDirectory = Path.GetDirectoryName(fullPath); 

Однако, если вы действительно хотите скопировать этот файл из установленной директории в Application.LocalUserAppDataPath

// Assuming that the LocalUserAppDataPath has already been created 
string destDirectory = Path.Combine(Application.LocalUserAppDataPath, "workingDirectory"); 
File.Copy(Path.Combine(installDirectory, "ffmpeg.exe"), 
      Path.Combine(destDirectory, "ffmpeg.exe"), true); 

, но потом, почему вы не искать функциональность InnoSetup, чтобы узнать, как поместить ffmpeg.exe файл в workingDirectory во время установки? Это решит все ваши проблемы.

+0

Я думаю, что он хочет поместить свой 'ffmpeg.exe' в папку' Path.GetDirectoryName (Application.LocalUserAppDataPath) + @ "\ workingDirectory" ' –

+0

, если он находится в той же папке с основным .exe, это так просто. –

+0

Ну, я думаю, что ОП должен прояснить этот момент, потому что он очень запутан. – Steve

0

Вы можете использовать Application.StartupPath ссылаться на путь к папке, где находятся ваш главный исполняемый файл и ffmpeg.exe

Application.StartupPath

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

http://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath.aspx

И потом, если вам это нужно ... скопировать ffmpeg.exe в рабочий каталог, который вы выбираете .. хотя я думаю, что его не очень хорошая идея ...

File.Copy(Source, Target) 

http://msdn.microsoft.com/en-us/library/c6cfw35a.aspx

string destDirectory = Path.Combine(Application.LocalUserAppDataPath, "workingDirectory"); 
string ffmpegDestPath = Path.Combine(destDirectory, "ffmpeg.exe"); 
string ffmpegSrcPath = Path.Combine(Application.StartupPath, "ffmpeg.exe"); 

if (!File.Exist(ffmpegDestPath)) { 
    if (!Directory.Exists(destDirectory)) Directory.Create(destDirectory); 
    File.Copy(ffmpegSrcPath , ffmpegDestPath); 
} 
+0

Я не думаю, что это то, чего хочет OP. Его файл 'ffmpeg.exe' должен находиться в папке' Path.GetDirectoryName (Application.LocalUserAppDataPath) + @ "\ workingDirectory" ' –

+0

Я думаю, что он хочет разместить свой файл' ffmpeg.exe' в этой папке, но его установочный пакет doesn 't переместите 'ffmpeg.exe' в эту папку, и поэтому он пуст. Поэтому проблема заключается в том, как перенести его в эту папку при установке. Я думаю, вы недооценили проблему здесь. –

+0

, но он не нужен ... ffmpeg должен быть в этом пути приложения ... в AplicationDataPath он должен хранить только данные, а не приложения – Blau

0

1- Вы должны создать ключ реестра, который может хранить путь установки и путь любого ВЗ ее папку, в которой нуждается ваше приложение. Проверьте этот вопрос о том, как это сделать: How to write install path to registry after install is complete with Inno setup

2- Прочитайте настройки реестра при запуске приложения. Используйте эти пути.

+0

Его проблема не в том, что путь, он уже заранее знает путь Path.GetDirectoryName (Application.LocalUserAppDataPath) + @ "\ workingDirectory", потому что это путь - это общий путь, который делает существуют в ОС Windows (подпапка 'workDirectory' создается его приложением). Его проблема заключается в том, что в этой папке нет 'ffmpeg.exe'. Как я уже сказал, это проект установки. Это работа проекта установки. –

+0

King King хорошо, что вы правы, поэтому мне нужно сообщить программе установки InnoSetup о создании каталога, в котором я хочу, например, workDirectory, а затем скопировать файл ffmpeg.exe в этот каталог при правильной установке? – joneK

+0

@joneK да, это то, что вам нужно понять, узнав, как это сделать. Если я использую проект установки Visual Studio, я могу помочь. Но для вашего 'innoSetup' я не могу. –

Смежные вопросы