PDA

View Full Version : سوال: اجرای بسته نصب msi توسط msiexec (MSI Installer)



ROSTAM2
دوشنبه 28 آبان 1403, 09:46 صبح
سلام

من یک دستور اجرا برای اجرای فایل msi. دارم:


Sub ExecuteInstaller()
Dim Installer As String = IO.Path.GetFullPath(".\StoreManagement Source Code.msi")
If IO.File.Exists(Installer) = False Then
MsgBox("فایل نصب قابل شناسایی نیست!", MsgBoxStyle.Critical)
Exit Sub
End If
Process.Start("msiexec.exe", String.Format("/i {0}", Installer))
End
End Sub


که از اجرای فایل استنکاف می ورزد....
برای نصب هم از option /i استفاده کردم ولی تنها همین پنخره Windows Installer رو نمایش می ده:

156290

ROSTAM2
دوشنبه 28 آبان 1403, 10:14 صبح
پیداش کردم

نام فایل نباید طولانی باشه....


Sub ExecuteInstaller()
Dim Installer As String = "Install.msi"
If IO.File.Exists(Installer) = False Then
MsgBox("فایل نصب قابل شناسایی نیست!", MsgBoxStyle.Critical)
Exit Sub
End If
Process.Start("msiexec", String.Format("/a {0}", Installer))
End
End Sub

mazoolagh
دوشنبه 28 آبان 1403, 12:35 عصر
سلام و روز خوش
فکر کنم منظور شما از طولانی بودن filename این هست که چند تکه باشه (چند کلمه ای با space بین اونها).
چه اسم برنامه اجرایی،
چه در path،
چه پارامترهای اون،
با این داستان مشکلی ندارن.

برای نشون دادن این مطلب من یک کپی از برنامه rar.exe (نه winrar.exe) رو در یک فولدر بلند ریختم،
و اسم خودش رو هم به Long RarExe With Extra Characters.exe تغییر دادم:

156291

و یک آرشیو با نام "long archive name.rar" ساختم:
Dim exec_address As String =
"D:\A Long Folder for Question 589917 BarnameNevis_Org\A Long SubFolder\Long RarExe With Extra Characters.exe"
With New Process
With .StartInfo
.FileName = exec_address
.WorkingDirectory = Path.GetDirectoryName(exec_address)
.Arguments = "a ""long archive name.rar"" *.pdf"
.WindowStyle = ProcessWindowStyle.Hidden
End With
.Start()
End With

156292

ROSTAM2
دوشنبه 28 آبان 1403, 12:58 عصر
سلام

منظور من اجرای فایل msi. با Windows Installer بود که با نام msiexec.exe به پارامتر اول معرفی شده.

گرچه دیگه نیازی ب این دستور ندارم چرا که من می خواستم فایل های Lock شده رو به اون اضافه کنم که ویندوز این اجازه رو نمی ده....

mazoolagh
دوشنبه 28 آبان 1403, 13:21 عصر
سلام دوباره
فرقی نمیکنه - من مثالی گذاشتم که همه حالتها رو در بر بگیره : هم filename هم path هم پارامتر.
شما همون اسم طولانی StoreManagement Source Code.msi رو درون جفت "" بذارین و در processinfo.arguments معرفی کنین
کد اولیه باید کار کنه.