Ejemplo n.º 1
0
        /// <summary>
        /// Check for locked ICU files and return
        /// </summary>
        /// <param name="localPath">the locale being modified. May just be the ICULocale name, or
        /// may be a fully specified path name to the language xml file, or null.</param>
        /// <param name="runSilent">Boolean set to true if we don't want to ask the user for info.
        /// <returns>true if ok to continue, or false if files are locked</returns>
        private static bool CheckForIcuLocked(string inputLocale, bool runSilent, CallingID caller)
        {
            bool   fOk;
            string locale = null;

            if (inputLocale != null)
            {
                int    icuName    = inputLocale.LastIndexOf("\\");
                string icuPortion = inputLocale.Substring(icuName + 1);
                int    iLocale    = icuPortion.LastIndexOf(".");
                if (iLocale < 0)
                {
                    iLocale = icuPortion.Length;
                }
                locale = icuPortion.Substring(0, iLocale);
            }
            do
            {
                fOk = true;
                string lockedFile = Icu.CheckIcuLocked(locale);
                if (lockedFile != null)
                {
                    LogFile.AddLine(" File Access Error: " + lockedFile + ". Asking user to Retry or Cancel. Caller=" + caller.ToString());
                    if (runSilent)
                    {
                        LogFile.AddLine(" Silently cancelled operation.");
                        System.Console.WriteLine("Silently cancelled operation.");
                        return(false);
                    }
                    string message = "";                        // for now
                    string nl      = Environment.NewLine;
                    switch (caller)
                    {
                    case CallingID.CID_RESTORE:
                        message = String.Format(InstallLanguageStrings.ksRestore_CloseOtherFWApps,
                                                lockedFile);
                        break;

                    case CallingID.CID_NEW:
                        message = String.Format(InstallLanguageStrings.ksNew_CloseOtherFWApps,
                                                locale, lockedFile);
                        break;

                    case CallingID.CID_INSTALL:
                    case CallingID.CID_REMOVE:
                    case CallingID.CID_UNKNOWN:
                    case CallingID.CID_UPDATE:
                    default:
                        message = String.Format(InstallLanguageStrings.ksUpdate_CloseOtherFWApps,
                                                locale, lockedFile);
                        break;
                    }
                    message = message + nl + nl +
                              InstallLanguageStrings.ksCloseClipboardConverter + nl + nl +
                              InstallLanguageStrings.ksCloseThisFWApp;

                    string                  caption   = InstallLanguageStrings.ksInstallLanguageMsgCaption;
                    MessageBoxButtons       buttons   = MessageBoxButtons.RetryCancel;
                    MessageBoxIcon          icon      = MessageBoxIcon.Exclamation;
                    MessageBoxDefaultButton defButton = MessageBoxDefaultButton.Button1;
                    DialogResult            result    = MessageBox.Show(message, caption, buttons, icon, defButton);
                    if (result == DialogResult.Cancel)
                    {
                        LogFile.AddLine(" User cancelled operation.");
                        System.Console.WriteLine("User cancelled operation.");
                        return(false);
                    }
                    else
                    {
                        fOk = false;
                    }
                }
            } while (fOk == false);
            return(true);
        }