0

ディレクトリ内の複数の MSI (同じ msi、異なるバージョン) から選択できるアプリがあり、このアプリからインストールまたはアンインストールできます。

MSI のリストを完全なパスで取得します。

string MSILocation = @"C:\test\";
string[] MSIFiles = Directory.GetFiles(MSILocation, "*.MSI", SearchOption.TopDirectoryOnly);

ここからリストビューにデータを入力し、リストビューを選択したら、インストール ボタンをクリックします。しかし、インストールコードを調べてみると、逐語的に台無しになっているようです。

string MSIname = lboMSIList.SelectedItem.ToString();
Process p = new Process();
p.StartInfo.FileName = "MSIEXEC.EXE";
p.StartInfo.Arguments = @"/i " + MSIname;
p.Start();

リストビューにはシングル/のファイルが表示されますが、最終結果は常にダブル/で表示されます

どこかでリテラル文字列が失われています。

コードを変更して.FileName = @"msiexec.exe /i C:\test\test1.msi"を実行すると問題なく動作しますが、ファイル名のリストから選択できるようにする必要があります。

何か案は?

4

1 に答える 1

0
string MSILocation = @"C:\test\"; 
string[] MSIFiles = Directory.GetFiles(MSILocation, "*.*", SearchOption.TopDirectoryOnly).Select(f => Path.GetFileName(f)).ToArray();  

上記MSIFiles のファイル名の配列を使用して、リストビューにデータを入力します

以下のようにPath.combineを使用します

string MSILocation = @"C:\test\";
string MSIname = lboMSIList.SelectedItem.ToString();
Process p = new Process();  
p.StartInfo.FileName = "MSIEXEC.EXE"; 
p.StartInfo.Arguments = string.Format(
"{0} {1}", @"/i",Path.Combine(MSILocation , MSIname );  
p.Start(); 
于 2011-09-05T17:18:03.680 に答える