Autor Beitrag
BennyM85
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 18.03.09 13:13 
Hallo Leute,

ich hab jetzt ne Weile im Netz und auch bei MS geguckt, aber für mich nichts richtig brauchbares gefunden.
Ich möchte gerne Programme installieren nach Aufruf eines Buttons (funktioniert schon) und dann die Prozessbar aktualisieren, dass er mir sozusagen anzeigt wieviel Prozent er vom gesamten Programmeinstallieren schon fertig hat.

hier ist die Installfunktion
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
 private void install(string programm, string parameter)
        {
            lblStatus.Visible = true;
            string myProgramsPath = Application.StartupPath;
            proc.StartInfo.FileName = myProgramsPath + "\\" + programm;
            proc.StartInfo.Arguments = parameter;
            proc.StartInfo.CreateNoWindow = true;
            proc.Start();
            installed++;
            progressBar1.Value = (100 * installed) / anzahl;
            progressBar1.Update();
            lblProzent.Text = progressBar1.Value.ToString("00")+"%";
            proc.WaitForExit();
        }


ich übergebe ihm eine exe datei und die parameter, wie gesagt installieren geht,
danach starte ich die Installation des Programms über proc.Start() und zähle die Anzahl der installierten Programme (installed++) eins hoch
nur mit den zwei zeilen mit der progressbar weiß ich nicht wie ich das global lassen laufen kann. stimmt die Berechnung?
Anzahl ist die Anzahl der zu installierenden Programme.

Ein weiteres Problem ist noch, dass während die Programme nacheinander installiert werden, ich nicht mehr ordentlich auf die GUI zugreifen kann, bzw. wenn ich ein Installationsfenster verschiebe während der installation, dann bleibt wird die GUI mit dem Installationsfenster weiterhin übermalt, sodass diese nicht vernünftig ausschaut.
Ich kann ja falls gewünscht einen Screenshot davon reinstellen....

Ich hoffe ihr könnt mir helfen.
LG Benny

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Dave86
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16


C# (VS 2005 / VS2008)
BeitragVerfasst: Mi 18.03.09 13:18 
Hi Benny.

Zum Thema dass die GUI hängen bleibt, dass liegt wahrscheinlich daran, dass du die Installationsroutine nicht in einem eigenen Thread laufen lässt, wodruch der GUI Thread dann solange blockiert ist, bis deine Funktion alle Programme installiert hat.

Das mit dem global laufen lassen versteh ich noch nicht ganz...

Grüße
Dave
BennyM85 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 18.03.09 13:30 
Also das mit den Threads ist eine gute Idee... das müsst ich mal so lösen

jetzt zu den Programmen:
ich hab ne oberfläche gebastelt mit checkboxen wo man ankreuzen kann, was alles installiert werden soll.
ich lass ihn dann zusammenzählen wieviele programme installiert werden und fange dann an diese zu installiern.
angenommen ich installiere jetzt 10 Programme dann möchte ich dass er nach jeder Programminstallation den fortschrittsbalken um 10 Prozent erhöht. für diesen fall wäre einfach; jetzt ist die anzahl der zu installierenden Programme ja dynamisch.

ist die formel richtig: (anzahl schon installierter Programme / Anzahl zu installierende Programme) * 100

Muss die Progressbar auch im eigenen Thread laufen?
Dave86
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16


C# (VS 2005 / VS2008)
BeitragVerfasst: Mi 18.03.09 13:36 
Hi Benny.

Schau dir mal die Eigenschaften des Progressbar an, da gib es eine MinValue und MaxValue eigenschaft.
Das einfachste ist du sagst zu beginn
ausblenden C#-Quelltext
1:
progressbar.Maximum = anzahl_install_programme;					


und bei jedem durchlauf
ausblenden C#-Quelltext
1:
progressBar1.Value++;					

das funktioniert aber nur wenn der Progressbar auch im gleichen Thread läuft.

Wenn du deine Installationsroutine in einen eigenen Thread laufen lässt, musst du mit delegates arbeiten

Hoffe ich konnte weiterhelfen.

Grüße
Dave

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 18.03.09 13:44 
@BennyM85: Schau dir mal die BackgroundWorker-Klasse an, dein Problem ist quasi das Paradebeispiel für ihre Benutzung.

_________________
>λ=
BennyM85 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mi 18.03.09 14:37 
thx, das war des rätsels lösung^^