从注册表读取程序的版本

原创 2004年10月17日 05:17:00

从注册表读取程序的版本


屠恩海(SunHai

开发工具:Microsoft Visual Studio .NET 2003
   操作系统:Windows XP

 

  编写网络程序时很可能用到自动拨号。比如,邮件群发软件用自动断线和拨号实现本机IP地址的更换。
  要实现自动拨号,分两步:
  从注册表读取本机拨号链接名称;
  自动拨号。  

           调用API函数从注册表读取本机拨号链接名

  以前,我调用API函数从注册表中读取本机拨号链接名称。
  在Module中用如下代码:

Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Integer, ByVal   lpSubKey As String, ByRef phkResult As Integer) As Integer
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Integer) As Integer
Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Integer, ByVal   dwIndex As Integer, ByVal lpName As String, ByVal cbName As Integer) As Integer
  Const HKEY_CURRENT_USER As Integer = &H80000001
  Const ERROR_NO_MORE_ITEMS As Short = 259
  Const ERROR_SUCCESS As Short = 0

  Dim hKey As Integer
  Dim i As Integer
  Dim astr As String = New String("", 256)
  If RegOpenKey(HKEY_CURRENT_USER, "RemoteAccess/Profile", hKey) = ERROR_SUCCESS Then
    While RegEnumKey(hKey, i, astr, 256) = ERROR_SUCCESS
      MsgBox(astr)  '链接名称
      i += 1
    End While
    RegCloseKey(hKey)
  End If


   


                 用RegistryKey 类读取链接名

     RegistryKey 类表示 Windows 注册表中的项级节点。此类是注册表封装。

  本文主要用到:

  RegistryKey.OpenSubKey 方法:用指定的写访问权限检索指定的子项。

  以只读方式检索子项。

  [Visual Basic] Overloads Public Function OpenSubKey(String) As RegistryKey


  RegistryKey.GetSubKeyNames 方法: 检索包含所有子项名称的字符串数组。

  Public Function GetSubKeyNames() As String ()

  用RegistryKey读取链接名可以说是非常简单:

Dim rk As RegistryKey = _
Registry.CurrentUser.OpenSubKey("RemoteAccess/Profile", True)
' Get the data from a specified item in the key.
Dim s As String() = rk.GetSubKeyNames()

For num As Integer = 0 To s.Length - 1
  MsgBox(s.GetValue(num))           '这就是链接名
Next

  

                用Shell实现自动拨号

  
读取链接名后,自动拨号就非常简单了。 
  
打开“控制面板”,“网络连接”,连接“属性”,“选项”,去掉“提示名称、密码和证书等(P)”前面的对勾。

shell("rasphone.exe -d" & linksName, AppWinStyle.Hide, True, -1)

  启动“命令提示符”,键入 rasphone,回车,就弹出“拨号网络对话框”。
  如果键入 rasphone -h,回车,弹出“拨号网络命令行”,列出rasphone的用法,比如,
   rasphone -d 表示弹出弹号项目对话框。
  rasphone -lx 在拨号快捷方式上执行命令'x'    

  Shell函数说明:
  AppWinStyle.Hide是sheell的参数,表示隐藏窗口并将焦点传到该窗口。
  True表示等待拨号完成。
   -1表示Shell直到程序完成才返回。


  也可以这样:

shell("rasdial.exe " & linksName, AppWinStyle.Hide, True, -1)

  关于各种命令参数,在OS的“帮助和支持”搜索“命令行”即可查到有关说明。命令行结合Shell函数可实现极多功能,你可试一试。

  Shell 函数使用说明:

Public Function Shell ( _ ByVal Pathname As String, _
   Optional ByVal Style As AppWinStyle = AppWinStyle.MinimizedFocus, _
   Optional ByVal Wait As Boolean = False, _
   Optional ByVal Timeout As Integer = -1 _
   ) As Integer

  Shell 函数的返回值取决于 Pathname 中指定的程序在 Shell 返回时是否仍在执行。如果将 Wait 设置为 True 并且程序在超时过期前结束, Shell 返回零。如果超时过期或者省略 Wait 或将它设置为 False ,则 Shell 返回程序的进程 ID。进程 ID 是标识正在运行的程序的唯一数字。

  如果 Shell 函数无法启动指定的程序,则出现 System.IO.FileNotFoundException 错误。例如,当试图从使用 System.Windows.Forms 的应用程序运行 16 位程序(如 command.com )时,可能会发生这种情况。解决办法是运行将调用所需的 16 位程序的 32 位程序。如果是 command.com ,则可以将运行 cmd.exe 作为另一种选择。

  默认情况下, Shell 函数异步运行程序。这意味着用 Shell 函数启动的程序在 Shell 函数后面的语句执行前可能没有结束执行。如果想等待程序结束后再继续,请将 Wait 设置为 True

  整个路径和文件规范应该始终用引号引起来,如以下示例所示:

ID = Shell ("""C:/Program Files/MyFile.exe"" -a -q", , True, 100000)

  字符串内每对相邻的双引号 ( "" ) 被解释为字符串中的一个双引号字符。因此,前面的示例表示 Shell 函数的下列字符串:

"C:/Program Files/MyFile.exe" -a -q

  如果路径没有用引号引起来,Windows 就会在 C:/ 目录中查找名为 Program.exe 的文件,而不是在 C:/Program Files 目录中查找 MyFile.exe 文件。

  安全说明 如果路径和文件规范没有用引号引起来,那么当文件名或路径节点包含空格时,就会出现安全风险。在上面的示例中,路径节点 /Program Files 包含一个空格。如果规范不在引号中,并且名为 Program.exe 的程序(例如通过非法的破坏)安装在 C:/ 中,Windows 就会执行 Program.exe 程序而不是 MyFile.exe 。

 


【系统信息获取】3,注册表中的当前系统各种信息

1,简介 注册表是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wi...
  • dpsying
  • dpsying
  • 2014年02月10日 14:16
  • 1440

如何使用vs对程序进行打包?怎么通过注册表获取安装路径?

打包需要连接的信息说多也不多,但是倘若前期不知道打包工具提供的功能,当用户需要更新时,我们只能采取先卸载再安装的笨方法,然而我们可以通过一种相对较为简便的方法来实现更新,那就是插件,那么我们要先知道软...
  • XBLYWL
  • XBLYWL
  • 2015年12月09日 22:12
  • 2135

CPU监控程序出错——无法加载计数器名称数据,因为从注册表读取的索引“”无效

先查看性能监视器( 命令:perfmon ), 会发现确实有错。 cmd 输入: lodctr /r  即可修复。...
  • yenange
  • yenange
  • 2015年08月21日 10:49
  • 2175

IIS服务的有关注册表路径

以下注册表项影响所有的 IIS 服务,而无需对每个服务单独进行设置。在 IIS 默认安装上,可能看不到其中的某些注册表项,这表明它们使用的是默认值。要将这些项设置为非默认值,必须手动创建项并进行设置。...
  • lltaoyy
  • lltaoyy
  • 2010年09月21日 09:39
  • 3324

使用注册表将程序设置为开机自启动

开机总是要打开Rtx, Chrome等应用,无奈又没有在相关程序中找到开机启动设置,所以才在网上找了这个方法,修改注册表即可.找到HKEY_LOCAL_MACHINE\SOFTWARE\Microso...
  • butterfly5211314
  • butterfly5211314
  • 2016年07月30日 08:38
  • 2639

VB-读写注册表 程序

Public Function SysRegControl(Optional ByVal RootKey As RegRootKey = regHKEY_LOCAL_MACHINE, Optional...
  • boovo
  • boovo
  • 2006年03月15日 21:49
  • 1750

利用C#访问注册表获取软件的安装路径

本博文使用C#访问注册表获取软件的安装路径并进行显示。
  • tiana0
  • tiana0
  • 2013年12月15日 10:51
  • 6731

通过注册表获取应用程序的路径

孙广东  2016.7.17http://blog.csdn.net/u010019717      虽然可以硬编码,例如,路径 ="e:\\Program Files\\Unity\\Editor\...
  • u010019717
  • u010019717
  • 2016年07月17日 21:55
  • 2098

关于C#下面windows服务读取注册表的问题

留着以后作备忘
  • mobailwang
  • mobailwang
  • 2016年01月14日 14:19
  • 1583

javascript取得机器名,用户名,读写注册表,启动应用程序

javascript取得机器名,用户名,读写注册表,启动应用程序 //javascript有个特殊的对象ActiveXObject,通过它可以访问windows的本地文件系统和应用程序, 比如:有...
  • gameWYD
  • gameWYD
  • 2011年09月19日 23:54
  • 1592
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从注册表读取程序的版本
举报原因:
原因补充:

(最多只允许输入30个字)