예제 #1
0
        public bool LaunchInstaller(string uri, bool appIsAlreadyRunning, ref List<InternalNotification> queuedNotifications)
        {
            bool newDisplayLoaded = false;
            this.uri = uri;
            this.appIsAlreadyRunning = appIsAlreadyRunning;
            this.tempFolder = Path.Combine(Utility.UserSettingFolder, TEMP_FOLDER);

            try
            {
                this.wc = new Growl.CoreLibrary.WebClientEx();
                wc.Headers.Add("User-Agent", USER_AGENT);

                byte[] data = wc.DownloadData(this.uri);
                string definition = Encoding.UTF8.GetString(data).Trim();
                DisplayInfo info = DisplayInfo.Parse(definition);
                if (info != null)
                {
                    this.InfoLabel.Text = String.Format(Utility.GetResourceString(Properties.Resources.DisplayInstaller_Prompt), info.Name, info.Author, info.Description);
                    this.YesButton.Visible = true;
                    this.NoButton.Visible = true;
                    this.OKButton.Visible = false;

                    /* NOTE: there is a bug that is caused when Growl is launched via protocol handler (growl:) from Opera.
                     * when that happens, the call to ShowDialog hangs.
                     * i could not find any documentation on this or any reason why it would be happening (not on a non-ui thread, windows handle is already created, etc).
                     * the only fix i could find was to Show/Hide the form before calling ShowDialog. i dont even know why this works, but it does.
                     * */
                    this.Show();
                    this.Hide();

                    DialogResult result = this.ShowDialog();
                    if (result == DialogResult.Yes)
                    {
                        this.InfoLabel.Text = Utility.GetResourceString(Properties.Resources.DisplayInstaller_Installing);
                        this.progressBar1.Value = 0;
                        this.progressBar1.Visible = true;
                        this.YesButton.Enabled = false;
                        this.NoButton.Enabled = false;
                        this.Show();
                        this.Refresh();

                        if (Directory.Exists(this.tempFolder))
                            Directory.Delete(this.tempFolder, true);
                        Directory.CreateDirectory(this.tempFolder);
                        string zipFileName = Path.Combine(this.tempFolder, String.Format("{0}.zip", System.Guid.NewGuid().ToString()));
                        info.LocalZipFileLocation = zipFileName;

                        wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
                        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);

                        StartDownload(info);

                        Utility.WriteDebugInfo(String.Format("Downloading display '{0}' to {1}", info.Name, info.LocalZipFileLocation));

                        System.Threading.WaitHandle[] handles = new System.Threading.WaitHandle[] { are, mre };
                        while (System.Threading.WaitHandle.WaitAny(handles) == 0)
                        {
                            lock (this.progress_lock)
                            {
                                this.progressBar1.Value = this.progress.ProgressPercentage;
                                Application.DoEvents();
                            }
                        }

                        this.progressBar1.Value = 100;
                        Application.DoEvents();

                        Utility.WriteDebugInfo(String.Format("Finished downloading display '{0}' to {1}", info.Name, info.LocalZipFileLocation));

                        if (this.errorMessage == null)
                        {
                            // unzip files to the correct location
                            string newDisplayFolder = Path.Combine(DisplayStyleManager.UserDisplayStyleDirectory, Growl.CoreLibrary.PathUtility.GetSafeFolderName(info.Name));
                            if (!ApplicationMain.HasProgramLaunchedYet || !Directory.Exists(newDisplayFolder))
                            {
                                Utility.WriteDebugInfo(String.Format("Display '{0}' downloaded - starting unzip.", info.Name));
                                Unzipper.UnZipFiles(info.LocalZipFileLocation, newDisplayFolder, false);

                                InternalNotification n = new InternalNotification(Properties.Resources.DisplayInstaller_NewDisplayInstalledTitle, String.Format(Utility.GetResourceString(Properties.Resources.DisplayInstaller_NewDisplayInstalledText), info.Name), info.Name);
                                queuedNotifications.Add(n);

                                newDisplayLoaded = true;

                                this.Close();
                            }
                            else
                            {
                                // display with the same name aleady exists...
                                ShowMessage(String.Format(Utility.GetResourceString(Properties.Resources.DisplayInstaller_AlreadyInstalled), info.Name));
                            }

                            // clean up
                            Utility.WriteDebugInfo(String.Format("Deleteing '{0}' zip file at {1}", info.Name, info.LocalZipFileLocation));
                            if (File.Exists(info.LocalZipFileLocation)) File.Delete(info.LocalZipFileLocation);
                        }
                        else
                        {
                            Utility.WriteDebugInfo(String.Format("Error downloading display '{0}'.", info.Name));
                            ShowMessage(errorMessage);
                        }
                    }
                }
                else
                {
                    // definition file was malformed
                    ShowMessage(String.Format(Utility.GetResourceString(Properties.Resources.DisplayInstaller_BadDefinitionFile), this.uri));
                }
            }
            catch (Exception ex)
            {
                // error downloading definition file
                Utility.WriteDebugInfo(String.Format("Error downloading display. {0} - {1}", ex.Message, ex.StackTrace));
                ShowMessage(String.Format(Utility.GetResourceString(Properties.Resources.DisplayInstaller_NonexistentDefinitionFile), this.uri));
            }
            return newDisplayLoaded;
        }
예제 #2
0
        public bool LaunchInstaller(string uri, bool appIsAlreadyRunning, ref List <InternalNotification> queuedNotifications, ref int cultureCodeHash)

        {
            bool installed = false;

            this.uri = uri;

            this.appIsAlreadyRunning = appIsAlreadyRunning;

            this.tempFolder = Path.Combine(Utility.UserSettingFolder, TEMP_FOLDER);



            try

            {
                this.wc = new Growl.CoreLibrary.WebClientEx();

                wc.Headers.Add("User-Agent", USER_AGENT);



                byte[] data = wc.DownloadData(this.uri);

                string definition = Encoding.UTF8.GetString(data).Trim();

                SubscriberInfo info = SubscriberInfo.Parse(definition);

                if (info != null)

                {
                    this.InfoLabel.Text = String.Format(Utility.GetResourceString(Properties.Resources.SubscriberInstaller_Prompt), info.Name, info.Author, info.Description);

                    this.YesButton.Visible = true;

                    this.NoButton.Visible = true;

                    this.OKButton.Visible = false;



                    /* NOTE: there is a bug that is caused when Growl is launched via protocol handler (growl:) from Opera.
                     *
                     * when that happens, the call to ShowDialog hangs.
                     *
                     * i could not find any documentation on this or any reason why it would be happening (not on a non-ui thread, windows handle is already created, etc).
                     *
                     * the only fix i could find was to Show/Hide the form before calling ShowDialog. i dont even know why this works, but it does.
                     *
                     * */

                    this.Show();

                    this.Hide();



                    DialogResult result = this.ShowDialog();

                    if (result == DialogResult.Yes)

                    {
                        this.InfoLabel.Text = Utility.GetResourceString(Properties.Resources.SubscriberInstaller_Installing);

                        this.progressBar1.Value = 0;

                        this.progressBar1.Visible = true;

                        this.YesButton.Enabled = false;

                        this.NoButton.Enabled = false;

                        this.Show();

                        this.Refresh();



                        if (Directory.Exists(this.tempFolder))
                        {
                            Directory.Delete(this.tempFolder, true);
                        }

                        Directory.CreateDirectory(this.tempFolder);

                        string zipFileName = Path.Combine(this.tempFolder, String.Format("{0}.zip", System.Guid.NewGuid().ToString()));

                        info.LocalZipFileLocation = zipFileName;



                        wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);

                        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);



                        StartDownload(info);



                        Utility.WriteDebugInfo(String.Format("Downloading subscriber plugin '{0}' to {1}", info.Name, info.LocalZipFileLocation));



                        System.Threading.WaitHandle[] handles = new System.Threading.WaitHandle[] { are, mre };

                        while (System.Threading.WaitHandle.WaitAny(handles) == 0)

                        {
                            lock (this.progress_lock)

                            {
                                this.progressBar1.Value = this.progress.ProgressPercentage;

                                Application.DoEvents();
                            }
                        }



                        this.progressBar1.Value = 100;

                        Application.DoEvents();



                        Utility.WriteDebugInfo(String.Format("Finished downloading subscriber plugin '{0}' to {1}", info.Name, info.LocalZipFileLocation));



                        if (this.errorMessage == null)

                        {
                            // unzip files to the correct location

                            string folder = Path.Combine(SubscriptionManager.UserPluginDirectory, Growl.CoreLibrary.PathUtility.GetSafeFolderName(info.Name));

                            if (!ApplicationMain.HasProgramLaunchedYet || !Directory.Exists(folder))

                            {
                                Utility.WriteDebugInfo(String.Format("Subscriber '{0}' downloaded - starting unzip.", info.Name));

                                Unzipper.UnZipFiles(info.LocalZipFileLocation, folder, false);



                                string text = String.Format(Properties.Resources.SubscriberInstaller_InstalledText, info.Name);

                                InternalNotification n = new InternalNotification(Properties.Resources.SubscriberInstaller_InstalledTitle, Utility.GetResourceString(text), null);

                                queuedNotifications.Add(n);



                                installed = true;



                                this.Close();
                            }

                            else

                            {
                                // display with the same name aleady exists...

                                ShowMessage(String.Format(Utility.GetResourceString(Properties.Resources.SubscriberInstaller_AlreadyInstalled), info.Name), true);
                            }



                            // clean up

                            Utility.WriteDebugInfo(String.Format("Deleteing '{0}' zip file at {1}", info.Name, info.LocalZipFileLocation));

                            if (File.Exists(info.LocalZipFileLocation))
                            {
                                File.Delete(info.LocalZipFileLocation);
                            }
                        }

                        else

                        {
                            Utility.WriteDebugInfo(String.Format("Error downloading subscriber plugin '{0}'.", info.Name));

                            ShowMessage(errorMessage, true);
                        }
                    }
                }

                else

                {
                    // definition file was malformed

                    ShowMessage(String.Format(Utility.GetResourceString(Properties.Resources.SubscriberInstaller_BadDefinitionFile), this.uri), true);
                }
            }

            catch (Exception ex)

            {
                // error downloading definition file

                Utility.WriteDebugInfo(String.Format("Error downloading subscriber plugin. {0} - {1}", ex.Message, ex.StackTrace));

                ShowMessage(String.Format(Utility.GetResourceString(Properties.Resources.SubscriberInstaller_NonexistentDefinitionFile), this.uri), true);
            }

            return(installed);
        }
예제 #3
0
        public bool LaunchInstaller(string uri, bool appIsAlreadyRunning, ref List <InternalNotification> queuedNotifications, ref int cultureCodeHash)

        {
            bool languageInstalled = false;

            this.uri = uri;

            this.appIsAlreadyRunning = appIsAlreadyRunning;



            try

            {
                // handle special case where we are resetting the value

                if (uri == "reset")

                {
                    Properties.Settings.Default.CultureCode = "";

                    Properties.Settings.Default.Save();

                    cultureCodeHash = 0;

                    languageInstalled = true;

                    return(languageInstalled);
                }



                this.wc = new Growl.CoreLibrary.WebClientEx();

                wc.Headers.Add("User-Agent", USER_AGENT);



                byte[] data = wc.DownloadData(this.uri);

                string definition = Encoding.UTF8.GetString(data).Trim();

                LanguageInfo info = LanguageInfo.Parse(definition);

                if (info != null)

                {
                    this.InfoLabel.Text = String.Format(Utility.GetResourceString(Properties.Resources.LanguageInstaller_Prompt), info.Name);

                    this.YesButton.Visible = true;

                    this.NoButton.Visible = true;

                    this.OKButton.Visible = false;



                    /* NOTE: there is a bug that is caused when Growl is launched via protocol handler (growl:) from Opera.
                     *
                     * when that happens, the call to ShowDialog hangs.
                     *
                     * i could not find any documentation on this or any reason why it would be happening (not on a non-ui thread, windows handle is already created, etc).
                     *
                     * the only fix i could find was to Show/Hide the form before calling ShowDialog. i dont even know why this works, but it does.
                     *
                     * */

                    this.Show();

                    this.Hide();



                    DialogResult result = this.ShowDialog();

                    if (result == DialogResult.Yes)

                    {
                        this.InfoLabel.Text = Utility.GetResourceString(Properties.Resources.LanguageInstaller_Installing);

                        this.progressBar1.Value = 0;

                        this.progressBar1.Visible = true;

                        this.YesButton.Enabled = false;

                        this.NoButton.Enabled = false;

                        this.Show();

                        this.Refresh();



                        if (Directory.Exists(this.tempFolder))
                        {
                            Directory.Delete(this.tempFolder, true);
                        }

                        Directory.CreateDirectory(this.tempFolder);

                        string guid = System.Guid.NewGuid().ToString();

                        string zipFileName = GetTempZipFileName(guid);

                        info.LocalZipFileLocation = zipFileName;



                        wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);

                        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);



                        StartDownload(info);



                        Utility.WriteDebugInfo(String.Format("Downloading language pack '{0}' to {1}", info.Name, info.LocalZipFileLocation));



                        System.Threading.WaitHandle[] handles = new System.Threading.WaitHandle[] { are, mre };

                        while (System.Threading.WaitHandle.WaitAny(handles) == 0)

                        {
                            lock (this.progress_lock)

                            {
                                this.progressBar1.Value = this.progress.ProgressPercentage;

                                Application.DoEvents();
                            }
                        }



                        this.progressBar1.Value = 100;

                        Application.DoEvents();



                        Utility.WriteDebugInfo(String.Format("Finished downloading language pack '{0}' to {1}", info.Name, info.LocalZipFileLocation));



                        if (this.errorMessage == null)

                        {
                            // unzip files to the correct location

                            string languageFolder = GetLanguageFolder(info.CultureCode);

                            if (!ApplicationMain.HasProgramLaunchedYet || !Directory.Exists(languageFolder))

                            {
                                Utility.WriteDebugInfo(String.Format("Language '{0}' downloaded - starting unzip.", info.Name));



                                // NOTE: installing a language pack requires elevated privileges (to write the resource assemblies to the bin folder).

                                // as such, we have to be elevated first

                                if (UserAccountControlHelper.IsElevated())

                                {
                                    cultureCodeHash = UnzipFilesToBin(info.Name, info.LocalZipFileLocation, info.CultureCode, ref queuedNotifications);
                                }

                                else

                                {
                                    string argument = String.Format("growl:languageelevatedinstall*{0}~{1}~{2}", info.CultureCode, info.Name, guid);

                                    UserAccountControlHelper.LaunchElevatedApplication(System.Windows.Forms.Application.ExecutablePath, argument, true);
                                }



                                this.Close();
                            }

                            else

                            {
                                // display with the same name aleady exists...

                                ShowMessage(String.Format(Utility.GetResourceString(Properties.Resources.LanguageInstaller_AlreadyInstalled), info.Name), true);
                            }
                        }

                        else

                        {
                            Utility.WriteDebugInfo(String.Format("Error downloading language pack '{0}'.", info.Name));

                            ShowMessage(errorMessage, true);
                        }
                    }
                }

                else

                {
                    // definition file was malformed

                    ShowMessage(String.Format(Utility.GetResourceString(Properties.Resources.LanguageInstaller_BadDefinitionFile), this.uri), true);
                }
            }

            catch (Exception ex)

            {
                // error downloading definition file

                Utility.WriteDebugInfo(String.Format("Error downloading language pack. {0} - {1}", ex.Message, ex.StackTrace));

                ShowMessage(String.Format(Utility.GetResourceString(Properties.Resources.LanguageInstaller_NonexistentDefinitionFile), this.uri), true);
            }

            return(languageInstalled);
        }
예제 #4
0
        public bool LaunchInstaller(string uri, bool appIsAlreadyRunning, ref List<InternalNotification> queuedNotifications, ref int cultureCodeHash)
        {
            bool languageInstalled = false;
            this.uri = uri;
            this.appIsAlreadyRunning = appIsAlreadyRunning;

            try
            {
                // handle special case where we are resetting the value
                if (uri == "reset")
                {
                    Properties.Settings.Default.CultureCode = "";
                    Properties.Settings.Default.Save();
                    cultureCodeHash = 0;
                    languageInstalled = true;
                    return languageInstalled;
                }

                this.wc = new Growl.CoreLibrary.WebClientEx();
                wc.Headers.Add("User-Agent", USER_AGENT);

                byte[] data = wc.DownloadData(this.uri);
                string definition = Encoding.UTF8.GetString(data).Trim();
                LanguageInfo info = LanguageInfo.Parse(definition);
                if (info != null)
                {
                    this.InfoLabel.Text = String.Format(Utility.GetResourceString(Properties.Resources.LanguageInstaller_Prompt), info.Name);
                    this.YesButton.Visible = true;
                    this.NoButton.Visible = true;
                    this.OKButton.Visible = false;

                    /* NOTE: there is a bug that is caused when Growl is launched via protocol handler (growl:) from Opera.
                     * when that happens, the call to ShowDialog hangs.
                     * i could not find any documentation on this or any reason why it would be happening (not on a non-ui thread, windows handle is already created, etc).
                     * the only fix i could find was to Show/Hide the form before calling ShowDialog. i dont even know why this works, but it does.
                     * */
                    this.Show();
                    this.Hide();

                    DialogResult result = this.ShowDialog();
                    if (result == DialogResult.Yes)
                    {
                        this.InfoLabel.Text = Utility.GetResourceString(Properties.Resources.LanguageInstaller_Installing);
                        this.progressBar1.Value = 0;
                        this.progressBar1.Visible = true;
                        this.YesButton.Enabled = false;
                        this.NoButton.Enabled = false;
                        this.Show();
                        this.Refresh();

                        if (Directory.Exists(this.tempFolder))
                            Directory.Delete(this.tempFolder, true);
                        Directory.CreateDirectory(this.tempFolder);
                        string guid = System.Guid.NewGuid().ToString();
                        string zipFileName = GetTempZipFileName(guid);
                        info.LocalZipFileLocation = zipFileName;

                        wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);
                        wc.DownloadFileCompleted += new AsyncCompletedEventHandler(wc_DownloadFileCompleted);

                        StartDownload(info);

                        Utility.WriteDebugInfo(String.Format("Downloading language pack '{0}' to {1}", info.Name, info.LocalZipFileLocation));

                        System.Threading.WaitHandle[] handles = new System.Threading.WaitHandle[] { are, mre };
                        while (System.Threading.WaitHandle.WaitAny(handles) == 0)
                        {
                            lock (this.progress_lock)
                            {
                                this.progressBar1.Value = this.progress.ProgressPercentage;
                                Application.DoEvents();
                            }
                        }

                        this.progressBar1.Value = 100;
                        Application.DoEvents();

                        Utility.WriteDebugInfo(String.Format("Finished downloading language pack '{0}' to {1}", info.Name, info.LocalZipFileLocation));

                        if (this.errorMessage == null)
                        {
                            // unzip files to the correct location
                            string languageFolder = GetLanguageFolder(info.CultureCode);
                            if (!ApplicationMain.HasProgramLaunchedYet || !Directory.Exists(languageFolder))
                            {
                                Utility.WriteDebugInfo(String.Format("Language '{0}' downloaded - starting unzip.", info.Name));

                                // NOTE: installing a language pack requires elevated privileges (to write the resource assemblies to the bin folder).
                                // as such, we have to be elevated first
                                if (UserAccountControlHelper.IsElevated())
                                {
                                    cultureCodeHash = UnzipFilesToBin(info.Name, info.LocalZipFileLocation, info.CultureCode, ref queuedNotifications);
                                }
                                else
                                {
                                    string argument = String.Format("growl:languageelevatedinstall*{0}~{1}~{2}", info.CultureCode, info.Name, guid);
                                    UserAccountControlHelper.LaunchElevatedApplication(System.Windows.Forms.Application.ExecutablePath, argument, true);
                                }

                                this.Close();
                            }
                            else
                            {
                                // display with the same name aleady exists...
                                ShowMessage(String.Format(Utility.GetResourceString(Properties.Resources.LanguageInstaller_AlreadyInstalled), info.Name), true);
                            }
                        }
                        else
                        {
                            Utility.WriteDebugInfo(String.Format("Error downloading language pack '{0}'.", info.Name));
                            ShowMessage(errorMessage, true);
                        }
                    }
                }
                else
                {
                    // definition file was malformed
                    ShowMessage(String.Format(Utility.GetResourceString(Properties.Resources.LanguageInstaller_BadDefinitionFile), this.uri), true);
                }
            }
            catch (Exception ex)
            {
                // error downloading definition file
                Utility.WriteDebugInfo(String.Format("Error downloading language pack. {0} - {1}", ex.Message, ex.StackTrace));
                ShowMessage(String.Format(Utility.GetResourceString(Properties.Resources.LanguageInstaller_NonexistentDefinitionFile), this.uri), true);
            }
            return languageInstalled;
        }