static void RunInstaller(
            string installerPath,
            ProgressControlsForDialogs progressControls,
            INotify notify)
        {
            progressControls.ProgressData.ProgressPercent = -1;

            ((IProgressControls)progressControls).ShowProgress(
                PlasticLocalization.GetString(PlasticLocalization.Name.InstallingProgress));

            notify.InstallationStarted();

            MacOSConfigWorkaround configWorkaround = new MacOSConfigWorkaround();

            IThreadWaiter waiter = ThreadWaiter.GetWaiter();

            waiter.Execute(
                /*threadOperationDelegate*/ delegate
            {
                configWorkaround.CreateClientConfigIfNeeded();

                Process installerProcess =
                    LaunchInstaller.ForPlatform(installerPath);

                if (installerProcess != null)
                {
                    installerProcess.WaitForExit();
                }

                configWorkaround.DeleteClientConfigIfNeeded();
            },
                /*afterOperationDelegate*/ delegate
            {
                notify.InstallationFinished();
                ((IProgressControls)progressControls).HideProgress();

                if (waiter.Exception != null)
                {
                    ((IProgressControls)progressControls).ShowError(
                        waiter.Exception.Message);
                    return;
                }

                File.Delete(installerPath);
            });
        }