Я заставил программу c# запустить команду для установки veracrypt with chocolatey и вывести вывод команды в текстовый файл, затем моя программа c# читает текстовый файл и отображает прогресс в прогресс-бар, но это не так вместо этого работает и замораживает программу
Пример вывода:
Chocolatey v0.10.15
Installing the following packages:
veracrypt
By installing you accept licenses for the packages.
veracrypt v1.24.20200126 already installed. Forcing reinstall of version '1.24.20200126'.
Please use upgrade if you meant to upgrade to a new version.
Progress: 0% - Saving 45.52 KB of 34.56 MB
Progress: 0% - Saving 84.58 KB of 34.56 MB
Progress: 0% - Saving 120.98 KB of 34.56 MB
Progress: 0% - Saving 159.85 KB of 34.56 MB
Progress: 0% - Saving 193.01 KB of 34.56 MB
Progress: 0% - Saving 233.01 KB of 34.56 MB
Progress: 0% - Saving 273.01 KB of 34.56 MB
Progress: 0% - Saving 313.01 KB of 34.56 MB
Progress: 0% - Saving 353.01 KB of 34.56 MB
Progress: 1% - Saving 393.01 KB of 34.56 MB
Этот код считывает вывод, когда установка выполняет свою работу
private bool Stop = false;
private async Task RunNotes()
{
var i = 0;
while(!File.Exists(Environment.GetEnvironmentVariable("USERPROFILE") + "\\Documents\\Output.txt"))
{
await Task.Delay(10);
}
while (Stop == false)
{
try
{
foreach (var readLine in File.ReadLines(Environment.GetEnvironmentVariable("USERPROFILE") +
"\\Documents\\Output.txt"))
{
var Percent = readLine.Split(':')[1].Trim().Split('%')[0].Trim();
progressBar1.Value = Int32.Parse(Percent);
Console.WriteLine(Percent);
}
}
catch
{
}
}
}
Но зависает вместо этого запрограммируйте
приведенный ниже код делает пакетный файл шоколадной установки:
public async Task RunCommandHidden(string Command)
{
string[] CommandChut = { Command };
File.WriteAllLines(System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\Documents\\RunCommand.bat", CommandChut);
Process C = new Process();
C.StartInfo.FileName = System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\Documents\\RunCommand.bat";
C.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
C.EnableRaisingEvents = true;
C.Exited += C_Exited;
C.Start();
if (InstallSoftware == true)
{
}
InstallSoftware = false;
while (Exit == false)
{
await Task.Delay(10);
}
Exit = false;
}
Timer t = new Timer();
private bool Failed = false;
private async Task CheckTimeout()
{
Failed = true;
t.Interval = 5000;
t.Tick += T_Tick;
t.Start();
}
private void T_Tick(object sender, EventArgs e)
{
Failed = false;
t.Stop();
}
private async void button1_Click(object sender, EventArgs e)
{
Stop = false;
CheckTimeout();
label1.Text = "Software Installation In Progress";
panel1.Visible = false;
ControlBox = false;
SoftwareNameInstallationTextBox.Text = SoftwareNameInstallationTextBox.Text.ToLower();
InstallSoftware = true;
RunNotes();
await RunCommandHidden(">%userprofile%\\Documents\\Output.txt (\ncd C:\\ProgramData\\chocolatey \nchoco.exe install " + SoftwareNameInstallationTextBox.Text + " --force -y\n)");
panel1.Visible = true;
ControlBox = true;
if (Failed == false)
{
SoftwareSuccessSound();
}
else
{
SoftwareFailedSound();
}
Stop = true;
label1.Text = "Ready To Use!";
}
Я что-то не так делаю?