我正在使用My.Computer.Filesystem.WriteAllBytes将存储在我的应用程序资源中的可执行文件写入它的启动目录。运行可执行文件后,我删除它。一切正常;但是,我会毫无理由地随机获取UnauthorizedAccessException。获得异常后,我可以手动删除文件没有问题。这是完整的代码:
' Convert MP3
' First, copy out converter
Dim Path = New IO.FileInfo(SoundPath)
Try
My.Computer.FileSystem.WriteAllBytes(Application.StartupPath + "\converter.exe", My.Resources.madplay, False)
Catch ex As Exception
MessageBox.Show(ex.ToString, "Report", MessageBoxButtons.OK)
Exit Sub
End Try
' Set up process
Dim MAD As New Process
' Set process info
Dim output As String = IO.Path.GetFileNameWithoutExtension(Path.FullName) + ".wav"
Dim input As String = Path.FullName
Dim adjust As String = barVolumeAdjust.Value.ToString
Dim hz As String = "15000"
With (MAD.StartInfo)
.FileName = Application.StartupPath + "\converter.exe"
.Arguments = "-v -a " + adjust + " -R " + hz + " -o """ + output + """ """ + input + """"
.UseShellExecute = False
.RedirectStandardInput = True
.RedirectStandardError = True
.RedirectStandardOutput = True
.CreateNoWindow = True
End With
' Start
MAD.Start()
' Update title with output
Dim Line As String = MAD.StandardError.ReadLine
While Not Line Is Nothing
Me.Text = Line
Line = MAD.StandardError.ReadLine
End While
' Stop
MAD.Close()
' Delete MAD
Try
IO.File.Delete(Application.StartupPath + "\converter.exe")
Catch ex As Exception
MessageBox.Show(ex.ToString, "Report", MessageBoxButtons.OK)
End Try
让我感到困惑的是,我确实只是写出了可执行文件,而其他任何东西都无法使用它。我检查了文件属性,它不是只读的。我的应用程序也以管理员身份运行。可能是什么问题?
答案 0 :(得分:3)
您不等待进程退出,因此当您尝试删除该文件时它仍在运行。请参阅流程。WaitForExit
答案 1 :(得分:1)
看起来您使用单独的进程来写出文件 - 当您尝试删除时,可能仍在使用该文件。
我建议捕获并处理异常以解决问题。