科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VS2005为Windows移动程序创建安装文件

VS2005为Windows移动程序创建安装文件

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Visual Studio2005支持诸如Pocket PC和Smartphone等Windows移动应用程序的开发。

作者:维维编译 来源:天极开发 2007年11月21日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
创建自定制的安装程序

  上一步中我们创建了CAB文件。其实从技术上来说这已经解决了安装问题。但是用户仍然需要知道如何将CAB文件传输到Pocket PC上,然后使用触笔来点击CAB文件启动安装过程。一个更好的方法是创建一个Windows安装程序来自动化安装过程。这样做的话,你需要写一些代码来启动Windows CE App Manager。App Manager是ActiveSync(用来在Pocket PC和计算机之间进行同步的程序,工作在Windows移动设备上,如Pocket PC和Smartphone)的一个部分,在Pocket PC上完成程序安装的任务。

  开始,在当前的solution中添加一个新的工程(File->Add Project)…点击Windows project type选择Class Library模板。给工程命名为CustomInstaller并且点击确定。

  你需要给你的工程添加两个引用。在Solution Explore中右键点击CustomInstaller,并且选择Add Reference…需要添加的是System.Configuration.Install和System.Windows.Forms。System.Configuration.Install命名空间提供了允许你为自己的组件编写自定制的安装文件的类,而System.Windows.Forms命名空间则提供了允许你通过Windows UI来和用户进行交互(如Messagebox等)的相关类。

  在Solution Explorer中双击Class1.vb,在文件中填入下列代码--SetupApp类:

Imports System.Windows.Forms
Imports System.Diagnostics
Imports System.Reflection
Imports System.IO
Imports Microsoft.Win32

<System.ComponentModel.RunInstaller(True)> _
Public Class SetupApp
Inherits System.Configuration.Install.Installer
Private Const INI_FILE As String = "\setup.ini"

Private Sub Installer_AfterInstall(ByVal sender As Object, _
ByVal e As System.Configuration.Install.InstallEventArgs) _
Handles MyBase.AfterInstall
 '---to be executed when the application is installed---
 Dim ceAppPath As String = GetWindowsCeApplicationManager()
 If ceAppPath = String.Empty Then
  Return
 End If
 Dim iniPath As String = GetIniPath()
 Process.Start(ceAppPath, iniPath)

End Sub

Private Sub Installer_AfterUninstall(ByVal sender As Object, _
ByVal e As System.Configuration.Install.InstallEventArgs) _
Handles MyBase.AfterUninstall
 '---to be executed when the application is uninstalled---
 Dim ceAppPath As String = GetWindowsCeApplicationManager()
 If ceAppPath = String.Empty Then
  Return
 End If
 Dim iniPath As String = GetIniPath()
 Process.Start(ceAppPath, String.Empty)
End Sub

Public Shared Function GetWindowsCeApplicationManager() As String
'---check if the Windows CE Application Manager is installed---
 Dim ceAppPath As String = KeyExists()
 If ceAppPath = String.Empty Then
  MessageBox.Show("Windows CE App Manager not installed", _
"Setup", MessageBoxButtons.OK, _
MessageBoxIcon.Error)
  Return String.Empty
 Else
  Return ceAppPath
 End If
End Function

Public Shared Function GetIniPath() As String
'---get the path of the .ini file---
Return """" & _
Path.Combine(Path.GetDirectoryName( _
System.Reflection.Assembly. _
GetExecutingAssembly().Location), "Setup.ini") & """"
End Function

Private Shared Function KeyExists() As String
 '---get the path to the Windows CE App Manager from the registry---
 Dim key As RegistryKey = _
Registry.LocalMachine.OpenSubKey( _
"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\CEAPPMGR.EXE")
 If key Is Nothing Then
  Return String.Empty
 Else
  Return key.GetValue(String.Empty, String.Empty)
 End If
End Function
End Class

  这个类里包含了调用Windows CE App Manager应用程序的代码,从而使得你的应用程序可以通过ActiveSync安装到用户的Pocket PC上。

  SetupApp类包含了2个事件和3个方法:

  ·Installer_AfterInstall事件:在安装过程启动后事件触发
  ·Installer_AfterUninstall事件:在反安装过程启动后事件触发
  ·GetWindowsCeApplicationManager:返回包含Windows CE App Manager的路径
  ·GetIniPath:返回Setup.ini文件的路径
  ·KeyExists:通过注册表检查当前机器上是否有Windows CE App Manager可用。

  SetupApp继承了Installer类,并且将RunInstallerAttribute属性设置为true(<System.ComponentModel.RunInstaller(True)>)。因此,Visual Studio的自定制安装程序或InstallUtil.exe将在程序安装时被触发。在安装时,SetupApp类首先检查是否当前系统里有Windows CE App Manager。如果有的话,程序将会通过Windows CE App Manager安装。(注:如果需要详细了解如何在.NET中创建自定制的安装程序,请查阅Building Custom Installer Classes in .NET)。

  当添加了这个类之后,就可以创建自定制的安装程序工程了。右键点击Solution Explorer中的CustomInstaller,并且选择Build。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章