หรือ จะเอาแบบวิธีผม คือ เอาไฟล์ติดตั้ง crystal report ไปด้วย เอาไว้ใน Resource ของโปรแกรม เมื่อเริ่มติดตั้งก็ เขียนไฟล์ติดตั้งไปที่ temp และก็เขียนไฟล์ bat เอาไว้ติดตั้ง แล้วก็สั่ง รันไฟล์ bat ให้มันติดตั้ง
Code (VB.NET)
Private Function LoadResourceToDisk(ByVal Resource As Byte(),
ByVal TargetFile As String) As Boolean
Try
Dim BufferFileStream As New IO.FileStream(TargetFile, IO.FileMode.Create, IO.FileAccess.Write)
BufferFileStream.Write(Resource, 0, Resource.Length)
BufferFileStream.Close()
Return True
Catch ex As Exception
Throw New Exception(ex.Message, ex.InnerException)
Return False
End Try
End Function
Code (VB.NET)
Dim temp As String = Path.GetPathRoot(Environment.SystemDirectory) & "temp\"
Dim osVer As Version = Environment.OSVersion.Version
'Install Crysal Report RunTime x64
Dim temCrystalPath As String = temp & "CRRuntime_64bit_13_0_18.msi"
Call LoadResourceToDisk(My.Resources.CRRuntime_64bit_13_0_18, temCrystalPath)
Dim sb As New System.Text.StringBuilder
sb.AppendLine("@echo off")
sb.AppendLine("echo Install Crystal Report...")
sb.AppendLine("msiexec /i """ & temCrystalPath & """ /passive")
sb.AppendLine("echo Done.")
sb.AppendLine("exit")
IO.File.WriteAllText(temp & "sti.bat", sb.ToString())
If osVer.Major < 6 Then
Try
Dim runbat As Process = Process.Start(temp & "sti.bat")
runbat.WaitForExit()
Catch ex As Exception
MsgBox(ex.Message)
End Try
ElseIf osVer.Major >= 6 Then
Try
Dim procInfo As New ProcessStartInfo()
procInfo.UseShellExecute = True
procInfo.FileName = (temp & "sti.bat")
procInfo.WorkingDirectory = ""
procInfo.Verb = "runas"
Dim runbat As Process = Process.Start(procInfo)
runbat.WaitForExit()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
Try
Dim installCRY As System.Diagnostics.Process = System.Diagnostics.Process.Start(temCrystalPath)
installCRY.WaitForExit()
Catch ex As Exception
MsgBox(ex.Message)
End Try