Changeset 2655


Ignore:
Timestamp:
Feb 11, 2011, 11:02:51 AM (11 years ago)
Author:
sauer
Message:

AutoUpdate: msi install preparations

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypUpdater/App.xaml.cs

    r2618 r2655  
    2323    public partial class App : Application
    2424    {
    25 
    26         private MainWindow m;
    27         private bool mayrestart = false;
    28         internal static string CryptoolExePath;
    29         private string ZipFilePath;
    30         private string CryptoolFolderPath;
    31         private int CryptoolProcessID;
     25        private MainWindow m = new CrypUpdater.MainWindow();
     26        private bool mayRestart = false;
     27        internal static string cryptoolExePath;
     28        private string filePath;
     29        private string cryptoolFolderPath;
     30        private int cryptoolProcessID;
    3231        private Process p;
    3332        private List<Process> unwantedProcesses = new List<Process>();
    3433
    35 
    3634        private void Application_Startup(object sender, StartupEventArgs e)
    3735        {
    38 
    39             m = new CrypUpdater.MainWindow();
    40 
    41             try
    42             {
    43                 ZipFilePath = e.Args[0];
    44                 CryptoolFolderPath = e.Args[1];
    45                 CryptoolExePath = e.Args[2];
    46                 CryptoolProcessID = Convert.ToInt32(e.Args[3]);
    47                 mayrestart = Convert.ToBoolean(e.Args[4]);
    48                 p = Process.GetProcessById(CryptoolProcessID);
     36            try
     37            {
     38                filePath = e.Args[0];
     39                cryptoolFolderPath = e.Args[1];
     40                cryptoolExePath = e.Args[2];
     41                cryptoolProcessID = Convert.ToInt32(e.Args[3]);
     42                mayRestart = Convert.ToBoolean(e.Args[4]);
     43                p = Process.GetProcessById(cryptoolProcessID);
    4944
    5045                if (p.WaitForExit(1000 * 30))
    51                 {
    52                     unwantedProcesses = FindCrypToolProcesses(CryptoolFolderPath);
    53                     if (unwantedProcesses.Count == 0)
    54                     {
    55                         UnpackZip(ZipFilePath, CryptoolFolderPath);
    56                     }
    57                     else
    58                     {
    59                         AskForLicenseToKill();
    60                     }
    61 
    62                 }
     46                    StartUpdateProcess();
    6347                else
    6448                {
     
    7357                            p.Kill();
    7458                            p.WaitForExit();
    75                             unwantedProcesses = FindCrypToolProcesses(CryptoolFolderPath);
    76                             if (unwantedProcesses.Count == 0)
    77                             {
    78                                 UnpackZip(ZipFilePath, CryptoolFolderPath);
    79                             }
    80                             else
    81                             {
    82                                 AskForLicenseToKill();
    83                             }
     59                            StartUpdateProcess();
    8460                        }
    8561                        catch (Exception)
    8662                        {
    87                             unwantedProcesses = FindCrypToolProcesses(CryptoolFolderPath);
    88                             if (unwantedProcesses.Count == 0)
    89                             {
    90                                 UnpackZip(ZipFilePath, CryptoolFolderPath);
    91                             }
    92                             else
    93                             {
    94                                 AskForLicenseToKill();
    95                             }
     63                            StartUpdateProcess();
    9664                        }
    9765                    }
    9866                    else
    99                     {
    10067                        MessageBox.Show("Update failed. CrypTool 2.0 will be restarted.");
    101                     }
    102 
    10368                }
    10469
     
    10671            catch (IndexOutOfRangeException) // parameter not set
    10772            {
    108                 if (CryptoolExePath != null)
    109                 {
     73                if (cryptoolExePath != null)
    11074                    MessageBox.Show("Update failed. CrypTool 2.0 will be restarted.", "Error");
    111                 }
    112                 else
    113                 {
     75                else
    11476                    UpdateFailure();
    115                 }
    11677            }
    11778            catch (FormatException) // no id or mayrestart was parsable
     
    12182            catch (ArgumentException) // the invoking process has already exited (no such process with this id exists)
    12283            {
    123                 unwantedProcesses = FindCrypToolProcesses(CryptoolFolderPath);
    124                 if (unwantedProcesses.Count == 0)
    125                 {
    126                     UnpackZip(ZipFilePath, CryptoolFolderPath);
    127                 }
    128                 else
    129                 {
    130                     AskForLicenseToKill();
    131                 }
    132             }
    133 
    134             if (mayrestart)
    135             {
    136                 File.Delete(ZipFilePath);
     84                StartUpdateProcess();
     85            }
     86
     87            if (mayRestart)
     88            {
     89                File.Delete(filePath);
    13790                RestartCryptool();
    13891            }
     
    14093                App.Current.Shutdown();
    14194
     95        }
     96
     97        private void StartUpdateProcess()
     98        {
     99            unwantedProcesses = FindCrypToolProcesses();
     100            if (unwantedProcesses.Count == 0)
     101            {
     102                if (filePath.EndsWith("zip"))
     103                    UnpackZip(filePath, cryptoolFolderPath);
     104                else
     105                {
     106                    Process p = new Process();
     107                    p.StartInfo.FileName = "msiexec.exe";
     108                    p.StartInfo.Arguments = "/i \"" + filePath + "\" /qb /l* install.txt INSTALLDIR=\"" + cryptoolFolderPath + "\"";
     109                    p.Start();
     110                    p.WaitForExit();
     111                    if (p.ExitCode != 0)
     112                        MessageBox.Show("The exit code is not equal to zero. See log file for more information. CrypTool 2.0 will be restarted.", "Error");
     113                }
     114            }
     115            else
     116                AskForLicenseToKill();
    142117        }
    143118
     
    165140            if (result == MessageBoxResult.Yes)
    166141            {
    167                 KillOtherProcesses(unwantedProcesses);
    168                 UnpackZip(ZipFilePath, CryptoolFolderPath);
     142                KillOtherProcesses();
     143                StartUpdateProcess();
    169144            }
    170145            else
     
    174149        }
    175150
    176         private static void KillOtherProcesses(List<Process> unwantedProcesses)
     151        private void KillOtherProcesses()
    177152        {
    178153            try
     
    193168        }
    194169
    195         private static void UpdateFailure()
     170        private void UpdateFailure()
    196171        {
    197172            MessageBox.Show("Update failed, wrong parameters!", "Error");
     
    199174        }
    200175
    201         private static void RestartCryptool()
    202         {
    203             try
    204             {
    205                 System.Diagnostics.Process.Start(CryptoolExePath);
     176        private void RestartCryptool()
     177        {
     178            try
     179            {
     180                Process.Start(cryptoolExePath);
    206181                Application.Current.Shutdown();
    207182            }
     
    212187                MessageBoxResult res = MessageBox.Show("CrypTool 2.0 could not be restarted! Try again later.", caption2, bu);
    213188                if (res == MessageBoxResult.OK)
    214                 {
    215189                    Application.Current.Shutdown();
    216                 }
    217190            }
    218191        }
     
    233206                    int progress = 0;
    234207
     208                    m.Show();
     209
    235210                    foreach (ZipEntry e in zip)
    236211                    {
    237212                        e.Extract(CryptoolFolderPath, ExtractExistingFileAction.OverwriteSilently);
    238                         m.Show();
    239213                        i++;
    240214                        progress = i * 100 / count;
     
    247221            catch (UnauthorizedAccessException)
    248222            {
    249 
    250223                WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
    251224
    252225                if (!pricipal.IsInRole(WindowsBuiltInRole.Administrator))
    253226                {
    254                     ProcessStartInfo psi = new ProcessStartInfo("CrypUpdater.exe", "\"" + ZipFilePath + "\" " + "\"" + CryptoolFolderPath + "\" " + "\"" + CryptoolExePath + "\" " + "\"" + CryptoolProcessID + "\" \"" + Boolean.FalseString + "\"");
     227                    ProcessStartInfo psi = new ProcessStartInfo("CrypUpdater.exe", "\"" + ZipFilePath + "\" " + "\"" + CryptoolFolderPath + "\" " + "\"" + cryptoolExePath + "\" " + "\"" + cryptoolProcessID + "\" \"" + Boolean.FalseString + "\"");
    255228                    psi.UseShellExecute = true;
    256229                    psi.Verb = "runas";
     
    261234                else
    262235                    MessageBox.Show("Extraction failed: CrypTool 2.0 will be restarted.", "Error");
    263 
    264 
    265236            }
    266237            catch (Exception e)
     
    272243
    273244
    274         private List<Process> FindCrypToolProcesses(string cryptoolFolderPath)
     245        private List<Process> FindCrypToolProcesses()
    275246        {
    276247            List<Process> processList = new List<Process>();
     
    278249            try
    279250            {
    280                 Process[] p1 = Process.GetProcessesByName("CrypStartup");
    281                 foreach (Process p in p1)
     251                Process[] p2 = Process.GetProcessesByName("CrypWin");
     252                foreach (Process p in p2)
    282253                {
    283254                    if (Path.GetDirectoryName(p.MainModule.FileName) == cryptoolFolderPath)
     
    290261            }
    291262
    292             try
    293             {
    294                 Process[] p2 = Process.GetProcessesByName("CrypWin");
    295                 foreach (Process p in p2)
    296                 {
    297                     if (Path.GetDirectoryName(p.MainModule.FileName) == cryptoolFolderPath)
    298                         processList.Add(p);
    299                 }
    300             }
    301             catch (Exception)
    302             {
    303                 //32 bit updater cannot check for 64 bit processes
    304             }
    305 
    306263            return processList;
    307264        }
Note: See TracChangeset for help on using the changeset viewer.