>Namespace Framework > > Public Class ProcessFile > > Public cArguments As String = "" > Public cDomain As String = "" > Public cError As String = "" > Public cFileName As String = "" > Public cLog As String = "" > Public cMessage As String = "" > Public cOutput As String = "" > Public cPassword As String = "" > Public cUsername As String = "" > Public cWorkingDirectory As String = "" > Public lRedirectStandardError As Boolean = True > Public lRedirectStandardInput As Boolean = True > Public lRedirectStandardOutput As Boolean = True > Public oProcess As Process = New Process > Private oApp As Framework.App = Nothing > Private oLXProcess As Framework.LXProcess = Nothing > > ' This is when we access the class in a desktop mode > Public Sub New(ByVal toApplication As Framework.App) > oApp = toApplication > End Sub > > ' This is when we access the class in a Web or Web Service mode > Public Sub New(ByVal toProcess As Framework.LXProcess) > oLXProcess = toProcess > oApp = oLXProcess.oApp > End Sub > > Public Function Process() As Boolean > Dim loSecureString As System.Security.SecureString = New System.Security.SecureString() > Dim lnCounter As Integer = 0 > > ' Reset the values > cError = "" > cLog = "" > cMessage = "" > cOutput = "" > > ' Trim everything > cArguments = Trim(cArguments) > cDomain = Trim(cDomain) > cPassword = Trim(cPassword) > cUsername = Trim(cUsername) > > ' If we have a working directory > If cWorkingDirectory.Length > 0 Then > > ' If the directory does not exist > If Not oApp.DirectoryExist(cWorkingDirectory) Then > cMessage = "The directory " + cWorkingDirectory + " does not exist." > Return False > End If > > End If > > ' If the file does not exist > If Not oApp.FileExist(cFileName) Then > cMessage = "The file " + cFileName + " does not exist." > Return False > End If > > oProcess.StartInfo.FileName = cFileName > oProcess.StartInfo.WorkingDirectory = cWorkingDirectory > oProcess.StartInfo.Arguments = cArguments > oProcess.StartInfo.RedirectStandardOutput = lRedirectStandardOutput > oProcess.StartInfo.RedirectStandardInput = lRedirectStandardInput > oProcess.StartInfo.RedirectStandardError = lRedirectStandardError > oProcess.StartInfo.UseShellExecute = False > oProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden > oProcess.StartInfo.CreateNoWindow = True > > ' If we have a domain > If cDomain.Length > 0 Then > oProcess.StartInfo.Domain = cDomain > End If > > ' If we have a username > If cUsername.Length > 0 Then > oProcess.StartInfo.LoadUserProfile = True > oProcess.StartInfo.UserName = cUsername > > ' For each character > For lnCounter = 1 To cPassword.Length > loSecureString.AppendChar(cPassword(lnCounter - 1)) > Next > > oProcess.StartInfo.Password = loSecureString > End If > > Try > oProcess.Start() > Catch loError As Exception > cMessage = loError.Message + " " + cFileName + " " + cArguments > Return False > End Try > > ' If we have redirected the error > If lRedirectStandardError Then > cError = oProcess.StandardError.ReadToEnd() > End If > > ' If we have redirected the output > If lRedirectStandardOutput Then > cOutput = oProcess.StandardOutput.ReadToEnd() > > ' If we have an output > If cOutput.Length > 0 Then > > ' If we have at least three characters > If cOutput.Length > 2 Then > > ' If the last characters is a carriage return > If Mid(cOutput, cOutput.Length - 1, 2) = oApp.cCR Then > cOutput = Mid(cOutput, 1, cOutput.Length - 2) > End If > > End If > > ' Some output contains only CHR(13), so we will do some parsing to standardize all this > cOutput = oApp.StrTran(cOutput, oApp.cCR, "LXFramework" + Chr(0) + "LXFramework") > cOutput = oApp.StrTran(cOutput, Chr(13), oApp.cCR) > cOutput = oApp.StrTran(cOutput, "LXFramework" + Chr(0) + "LXFramework", oApp.cCR) > > End If > > End If > > ' If we have an output > If cOutput.Length > 0 Then > cLog = cLog + "Output" + oApp.cCR + "------" + oApp.cCR + cOutput > End If > > ' If we have an error > If cError.Length > 0 Then > cLog = cLog + "Error" + oApp.cCR + "-----" + oApp.cCR + cError > End If > > ' Reset the values > cDomain = "" > cPassword = "" > cUsername = "" > > Return True > End Function > > End Class > >End Namespace >>
> Dim loProcess As Framework.ProcessFile = New Framework.ProcessFile(oApp) > > loProcess.cWorkingDirectory = cWinZipDirectory > loProcess.cFileName = loProcess.cWorkingDirectory + "\WZUnzip.exe" > loProcess.cArguments = loProcess.cArguments + " """ + cFile + """" > loProcess.cArguments = loProcess.cArguments + " """ + lcDirectory + """" > loProcess.lRedirectStandardInput = False > loProcess.lRedirectStandardError = False > loProcess.lRedirectStandardOutput = False > If Not loProcess.Process() Then > cMessage = loProcess.cMessage > Exit Try > End If > > ' Add a 7.0 second timeout to leave enough time for the memory to be flush so loFileDirectory.GetFile() can see the files > System.Threading.Thread.Sleep(7000) > >>