Обновите приложение WPF с помощью консольного приложения, которое будет вызывать службу Windows. - PullRequest
0 голосов
/ 09 октября 2018

Привет мастерам стека переполнения.То, что я хочу попытаться решить, это обновить мое приложение WPF, у меня есть 3 приложения WPF, консольное приложение и служба Windows.Это было то, что мое приложение WPF вызывает мое консольное приложение, и мое консольное приложение отправляет команду службе Windows, моя служба Windows завершает процесс моего приложения WPF и выполняет обновление, а мое консольное приложение снова запускает мое приложение WPF.Теперь часть обновления в службе Windows работает, но у меня есть проблема с моим консольным приложением, так как приложение WPF вызывает мое консольное приложение каждый раз, когда пользователь открывает его, и оно зацикливается навсегда.Я знаю, что есть проблемы с моим консольным приложением.

Спасибо заранее мастерам.:)

так вот мой код.

try
{
_log.Info("Checking for new update.");
int wpfAppExecuteCommand;
string defaultpath = @"C:\Program Files (x86)\WPF Application";
string wpfAppInfoPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "WPF\\WPFAppInfo.txt");
string[] txtFile = File.ReadAllLines(wpfAppInfoPath);

if (txtFile.Count() > 0)
{
    _wpfAppInfo = txtFile[0];

    switch (_wpfAppInfo)
    {
        case "WPF Application":
            wpfAppExecuteCommand = 150;
            _wpfSoftwareLocation = Path.Combine(defaultpath, "WPF Application.exe");
            break;
        default:
            wpfAppExecuteCommand = 0;
            break;
    }

    using (var service = new ServiceController("Update Checker API Service"))
    {
        if (service.Status == ServiceControllerStatus.Running)
        {
            _log.Debug("Service is running.");
            service.ExecuteCommand(wpfAppExecuteCommand);
        }
        else
        {
            _log.Error("Service is not running.");
        }
    }
}

_log.Debug("Please wait..");
_stopwatch = new Stopwatch();
_stopwatch.Start();

bool checking = true;

while (checking)
{
    if (_stopwatch.Elapsed > TimeSpan.FromMinutes(1))
    {
        if (!_oneMin)
        {
            _oneMin = true;
            _log.Warn("Installing udpate is taking too long, please wait..");
        }
    }
    else if (_stopwatch.Elapsed > TimeSpan.FromMinutes(5))
    {
        if (!_fiveMin)
        {
            _fiveMin = true;
            _log.Warn("Installing udpate is taking too long, please wait..");
        }
    }
    else if (_stopwatch.Elapsed > TimeSpan.FromMinutes(10))
    {
        if (!_tenMin)
        {
            _tenMin = true;
            _isTimerOn = true;
            _log.Warn(".");
        }
    }

    if (File.Exists(_resultTxt))
    {
        _log.Trace("File exist. Read if is Success");
        string[] lines = File.ReadAllLines(_resultTxt);

        if (lines[0].Equals("Success"))
        {
            _log.Trace("Checks if the Software.exe exist");
            if (File.Exists(_wpfSoftwareLocation))
            {
                string runMsiExecBatchFile = Path.Combine(_batchFileDefaultFolder, "RunMsiExec.bat");

                //Deleting the batch file used by windows service.
                if (File.Exists(runMsiExecBatchFile))
                {
                    File.Delete(Path.Combine(_batchFileDefaultFolder, "RunMsiExec.bat"));
                    _log.Info("RunMsiExec.bat file deleted.");
                }
                else
                {
                    _log.Warn("RunMsiExec.bat not found");
                }

                _openWpfApp = true;
                checking = false;
                _stopwatch.Stop();
            }
            else
            {
                _log.Error("Software.exe not exist");
                _stopwatch.Stop();
                checking = false;
            }

        }
        else if (lines[0].Equals("The current version is up to date"))
        {
            _log.Info("The current version is up to date");
            _openWpfApp = true;
            checking = false;
            _stopwatch.Stop();
        }
        else
        {
            _log.Error(lines[0]);
            checking = false;
            _stopwatch.Stop();
        }
    }
    else
    {
        _log.Debug("Result text not found.");
    }
}

if (_openWpfApp)
{
    _log.Info("Open WPF application software.");
    Process.Start(_wpfSoftwareLocation);
}
else
{
    _log.Info("Unable to open the Wpf application software.");
} 
catch (Exception ex)
{
_log.Error(ex);
}
...