Changeset 2231


Ignore:
Timestamp:
Dec 19, 2010, 10:51:58 PM (11 years ago)
Author:
sauer
Message:

AutoUpdate:

  • different handling of user permissions, needs to be tested separately on xp, vista and 7
Location:
trunk
Files:
3 edited

Legend:

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

    r2210 r2231  
    1212using Ionic.Zip;
    1313using System.ComponentModel;
     14using System.Security.AccessControl;
     15using System.Security.Principal;
    1416
    1517
     
    2325
    2426        private MainWindow m;
    25 
     27        private bool mayrestart = false;
    2628        internal static string CryptoolExePath;
    27 
    2829        private string ZipFilePath;
    29 
    3030        private string CryptoolFolderPath;
    31 
     31        private int CryptoolProcessID;
    3232        private Process p;
    33 
    3433        private List<Process> unwantedProcesses = new List<Process>();
    3534
     
    3938
    4039            m = new CrypUpdater.MainWindow();
    41             m.Show();
    42             int CryptoolProcessID;
    43            
    4440
    4541            try
     
    4945                CryptoolExePath = e.Args[2];
    5046                CryptoolProcessID = Convert.ToInt32(e.Args[3]);
     47                mayrestart = Convert.ToBoolean(e.Args[4]);
    5148                p = Process.GetProcessById(CryptoolProcessID);
    5249
     
    5754                    {
    5855                        UnpackZip(ZipFilePath, CryptoolFolderPath);
    59                         RestartCryptool();
    6056                    }
    6157                    else
     
    8177                            {
    8278                                UnpackZip(ZipFilePath, CryptoolFolderPath);
    83                                 RestartCryptool();
    8479                            }
    8580                            else
     
    9489                            {
    9590                                UnpackZip(ZipFilePath, CryptoolFolderPath);
    96                                 RestartCryptool();
    9791                            }
    9892                            else
     
    10599                    {
    106100                        MessageBox.Show("Update failed. CrypTool 2.0 will be restarted.");
    107                         RestartCryptool();
    108                     }
    109                    
     101                    }
    110102
    111103                }
     
    117109                {
    118110                    MessageBox.Show("Update failed. CrypTool 2.0 will be restarted.", "Error");
    119                     RestartCryptool();
    120111                }
    121112                else
     
    124115                }
    125116            }
    126             catch (FormatException) // no id was parsable
     117            catch (FormatException) // no id or mayrestart was parsable
    127118            {
    128119                UpdateFailure();
     
    134125                {
    135126                    UnpackZip(ZipFilePath, CryptoolFolderPath);
    136                     RestartCryptool();
    137127                }
    138128                else
     
    141131                }
    142132            }
     133
     134            if(mayrestart)
     135                RestartCryptool();
     136            else
     137                App.Current.Shutdown();
    143138
    144139        }
     
    169164                KillOtherProcesses(unwantedProcesses);
    170165                UnpackZip(ZipFilePath, CryptoolFolderPath);
    171                 RestartCryptool();
    172166            }
    173167            else
    174168            {
    175169                MessageBox.Show("Update failed. CrypTool 2.0 will be restarted.");
    176                 RestartCryptool();
    177170            }
    178171        }
     
    194187            {
    195188                MessageBox.Show("Update failed. Not able to remove remaining CrypTool 2.0 instances.", "Error");
    196                 RestartCryptool();
    197189            }
    198190        }
     
    229221            try
    230222            {
     223                DirectorySecurity ds = Directory.GetAccessControl(CryptoolFolderPath);
    231224
    232225                using (ZipFile zip = ZipFile.Read(ZipFilePath))
     
    240233                    {
    241234                        e.Extract(CryptoolFolderPath, ExtractExistingFileAction.OverwriteSilently);
     235                        m.Show();
    242236                        i++;
    243237                        progress = i * 100 / count;
     
    248242
    249243            }
     244            catch (UnauthorizedAccessException)
     245            {
     246
     247                WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
     248
     249                if (!pricipal.IsInRole(WindowsBuiltInRole.Administrator))
     250                {
     251                    ProcessStartInfo psi = new ProcessStartInfo("CrypUpdater.exe", "\"" + ZipFilePath + "\" " + "\"" + CryptoolFolderPath + "\" " + "\"" + CryptoolExePath + "\" " + "\"" + CryptoolProcessID + "\" \"" + Boolean.FalseString + "\"");
     252                    psi.UseShellExecute = true;
     253                    psi.Verb = "runas";
     254                    psi.WorkingDirectory = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
     255                    Process cu = Process.Start(psi);
     256                    cu.WaitForExit();
     257                }
     258                else
     259                    MessageBox.Show("Extraction failed: CrypTool 2.0 will be restarted.", "Error");
     260
     261
     262            }
    250263            catch (Exception e)
    251264            {
Note: See TracChangeset for help on using the changeset viewer.