mirror of
				https://github.com/Kopano-dev/kopano-ol-extension.git
				synced 2023-10-10 11:37:40 +00:00 
			
		
		
		
	Restarter command line now adds profile key, if possible
This commit is contained in:
		@@ -92,5 +92,6 @@ namespace Acacia.Stubs
 | 
			
		||||
        void InUI(Action action, bool synchronous = true);
 | 
			
		||||
 | 
			
		||||
        bool IsOffline { get; }
 | 
			
		||||
        string ProfileName { get; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -84,6 +84,22 @@ namespace Acacia.Stubs.OutlookWrappers
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string ProfileName
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                NSOutlook.NameSpace session = _app.Session;
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    return session.CurrentProfileName;
 | 
			
		||||
                }
 | 
			
		||||
                finally
 | 
			
		||||
                {
 | 
			
		||||
                    ComRelease.Release(session);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void InUI(Action action, bool synchronous = true)
 | 
			
		||||
        {
 | 
			
		||||
            if (synchronous)
 | 
			
		||||
@@ -148,9 +164,19 @@ namespace Acacia.Stubs.OutlookWrappers
 | 
			
		||||
            // Create the path to the restarter
 | 
			
		||||
            path = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(path), "OutlookRestarter.exe");
 | 
			
		||||
 | 
			
		||||
            // Use the current command line, with a profile command if not specified
 | 
			
		||||
            string commandLine = Environment.CommandLine;
 | 
			
		||||
            // This selects both /profile and /profiles. In that case we don't specify the profile, otherwise
 | 
			
		||||
            // we specify the current profile
 | 
			
		||||
            // It seems to be impossible to escape a profile name with a quote, so in that case ignore it
 | 
			
		||||
            if (!commandLine.ToLower().Contains("/profile") && !ProfileName.Contains("\""))
 | 
			
		||||
            {
 | 
			
		||||
                commandLine += " /profile " + Util.QuoteCommandLine(ProfileName);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Run that
 | 
			
		||||
            Process process = new Process();
 | 
			
		||||
            process.StartInfo = new ProcessStartInfo(path, Process.GetCurrentProcess().Id + " " + Environment.CommandLine);
 | 
			
		||||
            process.StartInfo = new ProcessStartInfo(path, Process.GetCurrentProcess().Id + " " + commandLine);
 | 
			
		||||
            process.Start();
 | 
			
		||||
 | 
			
		||||
            // And close us and any other windows
 | 
			
		||||
 
 | 
			
		||||
@@ -87,6 +87,16 @@ namespace Acacia.Utils
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static string CombineKeys(string prefix, string suffix)
 | 
			
		||||
        {
 | 
			
		||||
            // Cannot use Path.Combine, as that throws on characters that are not allowed in paths, but may be
 | 
			
		||||
            // allowed in the registry.
 | 
			
		||||
            string key = prefix.StripSuffix("\\");
 | 
			
		||||
            key += "\\";
 | 
			
		||||
            key += suffix.StripPrefix("\\");
 | 
			
		||||
            return key;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static RegistryKey OpenKeyImpl(string baseKeyPath, string suffix, bool localMachine, RegistryKeyPermissionCheck permissions)
 | 
			
		||||
        {
 | 
			
		||||
            // Add the suffix
 | 
			
		||||
@@ -94,7 +104,7 @@ namespace Acacia.Utils
 | 
			
		||||
            if (string.IsNullOrEmpty(suffix))
 | 
			
		||||
                keyPath = baseKeyPath;
 | 
			
		||||
            else
 | 
			
		||||
                keyPath = System.IO.Path.Combine(baseKeyPath, suffix);
 | 
			
		||||
                keyPath = CombineKeys(baseKeyPath, suffix);
 | 
			
		||||
 | 
			
		||||
            // Open the key.
 | 
			
		||||
            using (RegistryKey hive = RegistryKey.OpenBaseKey(localMachine ? RegistryHive.LocalMachine : RegistryHive.CurrentUser, RegistryView.Registry64))
 | 
			
		||||
 
 | 
			
		||||
@@ -162,5 +162,16 @@ namespace Acacia.Utils
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Command line
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Quotes a single command line argument
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public static string QuoteCommandLine(string arg)
 | 
			
		||||
        {
 | 
			
		||||
            return "\"" + Regex.Replace(arg, @"(\\*)" + "\"", @"$1$1\" + "\"") + "\"";
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user