我正在尝试检查用户正在运行的Windows应用程序的版本与服务器上的版本,以确定是否需要更新本地版本。我这么做是通过打电话
FileVersionInfo.GetVersionInfo("path to file on server") 阅读版本信息。但是,当我从计算机管理控制台查看服务器上打开的文件时,我会看到许多在读模式下打开的文件实例。当我需要将新版本复制到服务器时,这会导致问题。我首先必须关闭所有打开的文件,然后它才会让我写信给它。即使它们只在读模式下打开,它仍然让我关闭它们。
是否有更好的方法从服务器获取文件版本?或者是否有一种方法来处理我正在使用的FileInfo变量,以便它断开连接?
发布于 2022-02-23 19:30:56
我还没有找到一个好的解决方案使用FileVersionInfo。从我的研究来看,使用FileVersionInfo并不像您预期的那样释放变量,所以我改为从PowerShell脚本获取文件信息。这允许我释放对象和释放文件,因为我已经成功测试。下面是获取信息的代码:
Dim server_version As String = ""
Dim invoker As New RunspaceInvoke
Dim command As String = "(Get-Item path_to_file_no_quotes_needed).VersionInfo.FileVersion"
Try
Dim outputObjects As Collection(Of PSObject) = invoker.Invoke(command)
For Each result As PSObject In outputObjects
server_version = result.ToString
Next
Catch ex As Exception
End Try
invoker.dispose当这是从我的应用程序运行时,我看到文件在读取模式下在服务器上打开,但是它在大约3秒后消失。所以我可以看到这个物体正在被正确的处理。只有FYI,没有FileVersionInfo.dispose方法。
此外,要使其发挥作用,您需要:
Imports System.Management.Automation在你的项目中需要参考。它可在下列文件中找到:
C:\Windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll
发布于 2022-02-23 16:44:41
在显示的事件中,我有如下代码,
Try
If My.Application.IsNetworkDeployed AndAlso My.Application.Deployment.CheckForUpdate Then
'update available - the update will happen when app is closed
End If
Catch ex As Exception
'error while checking for update or update is corrupt
End Try我这样做是为了向用户提供更新可用的指示。
在我做的FormClosed活动中
Try
'see if update is available, and install if it is
If My.Application.IsNetworkDeployed Then
If My.Application.Deployment.CheckForUpdate Then
My.Application.Deployment.Update()
End If
End If
Catch ex As Exception
End Tryhttps://stackoverflow.com/questions/71238980
复制相似问题