まず、適切なタイトルを付けることができなかったことをお詫び申し上げます。私は、Stackoverflow で質問することにしたまで、検索して検索して検索した後、ほぼ一日中私の中にあったアイデアに行き詰まりました!
だからここに私が立ち往生している場所があります:
(現在 C# でコード化された自動インストーラーを作成していますが、これはオランダ語です。これは非常にうまく機能しますが、ベースを完成させるために必要なものは 1 つだけです。例:
- チェックリストボックスで「複数の」オブジェクトが選択されています。それらはチェックリストボックス自体から読み取られ、トリミングされ、その後起動されます。
これですべてが機能しました。たとえば、次のような待機メソッドを追加したかったのです。
- インストールの「例」としての Malwarebytes & CCleaner。
両方をチェックして [開始] をクリックすると、両方のプログラムが起動します。私がやりたいことは、プログラムに 1 つのプログラムを開始するように指示することです。終了 (終了) したら、次のプログラムに進む必要があります。
しかし...問題があります。私のプログラムは配列で開始されるため、チェックされたすべてのオブジェクトを開始するよりも、複数のオブジェクトがチェックされている場合に基本的に機能します。そして、基本的に同じものに到達する方法が本当にわかりません:
- 複数のオブジェクトが選択されている場合は、オブジェクトを開始し、目的の操作 (自動クリックなど) を行い、オブジェクトが閉じて閉じていることを確認したら、次のオブジェクトに移動し、完了するまで同じことを行います。プログレスバーで動作させたいのですが、紛らわしいように見えるため、プログレスバーを実際に調べたことはありません。
プロセスIDを見つけるコードがあるので、それで何かできるかもしれませんが、起動したアプリケーションでプロセスIDが同じになることは決してないので、それらが配列で起動すると、ちょっとした問題が発生します。
何をどのようにコーディングするか、これを行うかを理解してください。
これを機能させるために使用するコードは次のとおりです。
string pad = Application.StartupPath;
foreach (string checkedItem in checkedListBox1.CheckedItems)
{
if (checkedItem.Contains("."))
{
string str = checkedItem;
if (str.Contains("."))
{
int index = str.IndexOf('.');
string folder = str.Substring(0, index);
try
{
bool started = false;
var process = new Process();
process.StartInfo.FileName = pad + "/data/" + folder + "/" + checkedItem;
started = process.Start();
var processID = process.Id;
var processNAAM = process.ProcessName;
textBox1.Text += "Gevonden - ID: " + processID + " NAAM: " + processNAAM + Environment.NewLine;
textBox1.Text += DateTime.Now.ToString("HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo) + " - " + "Installatie Keuze wordt opgestart." + Environment.NewLine;
process.WaitForExit();
}
catch (Exception)
{
}
}
}
}