2015-05-06 6 views
0

Я разработал приложение, которое импортирует различные материалы в нашу базу данных. Пользователи будут использовать его, выполнив ярлык для нашего внутреннего сервера приложений. Поскольку часы работы меняются, мне нужно изменить файл .exe, пока кто-то его использует. Способ, предложенный моими коллегами:Обновление исполняемого файла .exe C#

1.Save в файле xml/ini файла, который должен быть запущен.

2.Copy new .exe, f.e import_2.exe для целевого расположения.

3.Simply выполнить файл .exe из ini-файла.

Я остановился в пункте 3. Как изменить целевой файл? Application.ExecutablePath не может быть изменен.

@EDIT окончательный подход. Простой, но не слишком элегантный. В конечном итоге вам, вероятно, лучше использовать ClickOnce.

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     IniParser parser = new IniParser(SupportingClass.AssemblyDirectory + "settings.ini"); 
     string exe_location = parser.GetSetting("ApplicationToRun", "App"); 

      string fullName = System.Reflection.Assembly.GetEntryAssembly().Location; 
     string myName = System.IO.Path.GetFileName(fullName).ToLower(); 
     if (exe_location != myName) 
     { 
      string arguments = ""; 
      foreach (var item in Environment.GetCommandLineArgs()) 
      { 
       arguments+=item+' '; 
      } 
      if (System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + exe_location)) 
      { 
       System.Diagnostics.Process starter = System.Diagnostics.Process.Start(exe_location, arguments); 
       return; 
      } 
     } 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new DbImporting()); 
    } 
} 
+1

Вы должны запустить новую копию exe с помощью 'System.Diagnostics.Process.Start()' и 'return' из текущего экземпляра exe –

+0

@ pm100: was что редактирование действительно необходимо? Есть больше вещей, которые вы могли бы редактировать в этом вопросе и названии. – Default

+0

Загрузите сборку из DLL, не пытайтесь изменить файл .exe. – MatthewMartin

ответ

1

Конечно, вы не можете изменить его - вы уже используете exe! Вместо этого вам нужно использовать некоторый загрузчик. Решение @ agent5566 довольно хорошо - это означает, что у вас будет загрузочный блок как часть реального приложения; что exe придется загружать в память, чтобы быть выключенным через несколько микросекунд позже :)

Самый простой способ ИМО - просто сделать вашу ссылку на файл bat, а не на исполняемый файл приложения , Таким образом, вы можете изменить bat, когда захотите, и указать его (в настоящий момент) корректный исполняемый файл.

bat файл будет, конечно, иметь только одну строку:

@start myApp_v2.exe 

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

Однако обратите внимание, что обычно не рекомендуется разрабатывать приложения, подобные этому в .NET. Приложения .NET имеют параметры безопасности, а по умолчанию не разрешено запускать приложения с сетевого диска с полными правами доверия (ваше приложение, вероятно, не будет работать). Рассматривали ли вы использование, например, ClickOnce? Он также автоматически обрабатывает обновления для вас, довольно удобно :)

+0

Я читал о ClickOnce, это, вероятно, будет таким, каким я буду заниматься будущими релизами. На данный момент я думаю, что буду использовать подход agent5566 - я не возражаю, что его закрывают через несколько микросекунд позже, это довольно легкое приложение. – Luntri

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