一旦我确定 Excel 安装在 Windows 上,我如何使用 vb.net 或 C# 以编程方式判断它是否是 licensed/registered 副本
Once I determine that Excel is installed on Windows, how can I programmatically tell if it is a licensed/registered copy using vb.net or C#
当我处理我的应用程序时,我的 Office 365 订阅已过期。该应用程序具有导出功能,如果已安装,可以将数据导出到 Excel,如果未安装,则可以将其作为格式化文本文档打开。
虽然订阅已过期,但仍然打开Excel。
有没有办法检查Excel是否是licensed/registered?
用于检查 Excel 安装的代码:
Dim regKey As Object = My.Computer.Registry.ClassesRoot.OpenSubKey("Excel.Application", False).OpenSubKey("CurVer", False)
If regKey.GetValue("").ToString() Is Nothing Then
Return False
Else
Return True
End If
以下是Windows 10 box,Office 的位置是
C:\程序Files\MicrosoftOffice\Office16
简而言之,在将结果写入文件的异步方法中使用 Process.Start 调用 cscript.exe
,然后 return 将字符串返回给调用者,后者检查是否 LICENSE STATUS: ---LICENSED---
在字符串中,如果是这样,则许可证是好的。如果需要更多信息,请考虑而不是 returning 字符串 return 从文件中读取字符串数组并查询其他详细信息。
替代方法是使用 PowerShell,连接到 Azure,然后使用类似于下面的代码调用适当的 PowerShell 命令。 following 是 C#,显示使用 PowerShell,可以轻松转换为 VB 并遵循下面列出的相同模式..
进口System.IO
Public Class Operations
Public Shared Async Function OfficeStatusAsync() As Task(Of String)
Return Await Task.Run(Async Function()
Const fileName = "office.txt"
Const workingFolder = "C:\Program Files\Microsoft Office\Office16"
If Not Directory.Exists(workingFolder) Then
Return "Directory not found"
End If
If File.Exists(fileName) Then
File.Delete(fileName)
End If
Dim start = New ProcessStartInfo With {
.FileName = "cscript.exe",
.UseShellExecute = False,
.RedirectStandardOutput = True,
.Arguments = "ospp.vbs /dstatus",
.CreateNoWindow = True,
.WorkingDirectory = workingFolder
}
Using process As Process = Process.Start(start)
Using reader = process.StandardOutput
process.EnableRaisingEvents = True
Dim result = Await reader.ReadToEndAsync()
File.WriteAllText(fileName, result)
process.WaitForExit()
Return File.ReadAllText(fileName)
End Using
End Using
End Function)
End Function
End Class
用法
Public Class Form1
Private Async Sub RunButton_Click(sender As Object, e As EventArgs) Handles RunButton.Click
Dim result = Await Operations.OfficeStatusAsync()
If result = "Directory not found" Then
MessageBox.Show("Incorrect folder")
Return
End If
If result.Contains("LICENSE STATUS: ---LICENSED---") Then
MessageBox.Show("Good to go")
Else
MessageBox.Show("Licence expired")
End If
End Sub
End Class
当我处理我的应用程序时,我的 Office 365 订阅已过期。该应用程序具有导出功能,如果已安装,可以将数据导出到 Excel,如果未安装,则可以将其作为格式化文本文档打开。
虽然订阅已过期,但仍然打开Excel。
有没有办法检查Excel是否是licensed/registered?
用于检查 Excel 安装的代码:
Dim regKey As Object = My.Computer.Registry.ClassesRoot.OpenSubKey("Excel.Application", False).OpenSubKey("CurVer", False)
If regKey.GetValue("").ToString() Is Nothing Then
Return False
Else
Return True
End If
以下是Windows 10 box,Office 的位置是
C:\程序Files\MicrosoftOffice\Office16
简而言之,在将结果写入文件的异步方法中使用 Process.Start 调用 cscript.exe
,然后 return 将字符串返回给调用者,后者检查是否 LICENSE STATUS: ---LICENSED---
在字符串中,如果是这样,则许可证是好的。如果需要更多信息,请考虑而不是 returning 字符串 return 从文件中读取字符串数组并查询其他详细信息。
替代方法是使用 PowerShell,连接到 Azure,然后使用类似于下面的代码调用适当的 PowerShell 命令。 following 是 C#,显示使用 PowerShell,可以轻松转换为 VB 并遵循下面列出的相同模式..
进口System.IO
Public Class Operations
Public Shared Async Function OfficeStatusAsync() As Task(Of String)
Return Await Task.Run(Async Function()
Const fileName = "office.txt"
Const workingFolder = "C:\Program Files\Microsoft Office\Office16"
If Not Directory.Exists(workingFolder) Then
Return "Directory not found"
End If
If File.Exists(fileName) Then
File.Delete(fileName)
End If
Dim start = New ProcessStartInfo With {
.FileName = "cscript.exe",
.UseShellExecute = False,
.RedirectStandardOutput = True,
.Arguments = "ospp.vbs /dstatus",
.CreateNoWindow = True,
.WorkingDirectory = workingFolder
}
Using process As Process = Process.Start(start)
Using reader = process.StandardOutput
process.EnableRaisingEvents = True
Dim result = Await reader.ReadToEndAsync()
File.WriteAllText(fileName, result)
process.WaitForExit()
Return File.ReadAllText(fileName)
End Using
End Using
End Function)
End Function
End Class
用法
Public Class Form1
Private Async Sub RunButton_Click(sender As Object, e As EventArgs) Handles RunButton.Click
Dim result = Await Operations.OfficeStatusAsync()
If result = "Directory not found" Then
MessageBox.Show("Incorrect folder")
Return
End If
If result.Contains("LICENSE STATUS: ---LICENSED---") Then
MessageBox.Show("Good to go")
Else
MessageBox.Show("Licence expired")
End If
End Sub
End Class