windows mobile ,wince 系统,用代码启动cab文件安装

有时候需要用代码来启动安装cab,以下是代码。不能实现静默安装。

启动后会提示用户是否安装,需要用户点击是才行。

using System;

using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;
using System.Diagnostics;
using System.Windows.Forms;
public class BLLInstallCab
{

    #region Const

    private const int STILL_ACTIVE = 0x103;

    #endregion

    #region P/Invoke

    [DllImport("coredll.dll", EntryPoint = "CreateProcess", SetLastError = true)]
    private static extern bool CreateProcess(string pszImageName, string pszCmdLine, IntPtr psaProcess, IntPtr psaThread, int fInheritHandles, int fdwCreate, IntPtr pvEnvironment, IntPtr pszCurDir, IntPtr psiStartInfo, ProcessInfo pi);

    [DllImport("coredll.dll", SetLastError = true)]
    private static extern bool GetExitCodeProcess(int hProcess, ref int lpExitCode);

    #endregion

    public sealed class ProcessInfo
    {
        public IntPtr hProcess = IntPtr.Zero;
        public IntPtr hThread = IntPtr.Zero;
        public int dwProcessID = 0;
        public int dwThreadID = 0;
    }

    /// <summary>
    /// 安装指定目录下多Cab包
    /// </summary>
    /// <param name="SetupDir">Cab包目录路径</param>
    public void SetupFiles(string SetupDir)
    {
        if (System.IO.Directory.Exists(SetupDir) == true)
        {
            ProcessInfo pi = new ProcessInfo();
            DirectoryInfo DirInfo = new DirectoryInfo(SetupDir);
            FileInfo[] Files = DirInfo.GetFiles("*.cab");
            foreach (FileInfo file in Files)
            {
                bool rc = CreateProcess("windows\\wceload.exe", "\"" + file.FullName + "\" /nodelete",
                    IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, pi);

                int lpExitCode = STILL_ACTIVE;

                int ErrorCode = 0;

                while ((rc == true) && (lpExitCode == STILL_ACTIVE))
                {
                    Application.DoEvents();
                    rc = GetExitCodeProcess(pi.hProcess.ToInt32(), ref lpExitCode);
                    if (rc == true)
                    {
                        if (lpExitCode == STILL_ACTIVE)
                            System.Threading.Thread.Sleep(1000);
                    }
                    else
                    {
                        ErrorCode = Marshal.GetLastWin32Error();
                    }
                }
            }
        }
    }

    /// <summary>
    /// 检查系统安装CF版本
    /// </summary>
    /// <param name="version">版本</param>
    /// <returns></returns>
    //private bool HaveNETCF2(char version)
    //{
    //    RegistryKey NETCFKey = null;
    //    try
    //    {
    //        bool Result = true;
    //        NETCFKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\.NETCompactFramework", false);
    //        if (NETCFKey == null)
    //            return Result;
    //        string[] valueNames = NETCFKey.GetValueNames();
    //        if (valueNames == null)
    //        {
    //            NETCFKey.Close();
    //            return Result;
    //        }
    //        for (int i = 0; i < valueNames.Length; i++)
    //        {
    //            //枚举注册表Software\\Microsoft\\.NETCompactFramework\CF版本值
    //            if ((valueNames[i] != null) && (valueNames[i].Length > 0) && (valueNames[i][0] == version))
    //            {
    //                Result = true;
    //                break;
    //            }
    //            else
    //            {
    //                Result = false;
    //            }
    //        }
    //        return Result;
    //    }
    //    catch
    //    {
    //        return false;
    //    }
    //    finally
    //    {
    //        if (NETCFKey != null)
    //            NETCFKey.Close();
    //    }
    //}
}

  

原文地址:https://www.cnblogs.com/Jerseyblog/p/9076436.html

时间: 2024-10-15 12:43:10

windows mobile ,wince 系统,用代码启动cab文件安装的相关文章

windows下制作linux U盘启动盘或者安装优盘(转)

windows下制作linux U盘启动盘或者安装优盘(转) Linux发行版排行榜:http://iso.linuxquestions.org/ [方案一]:UltraISO(不推荐,在Windows下制作Windows安装盘绝佳) 用UltraISO软件打开linux发行版的ISO文件,用UltraISO软件的“启动/启动光盘”中的:写入硬盘映像,选择USB-HDD/USB-HDD+,点击写入. [方案二]:UNetbootin(中文界面) http://unetbootin.sourcef

linux deepin 12.12.1和Windows 7双系统修改默认启动项

1.打开终端,输入 sudo gedit /etc/default/grub ,然后输入密码.2.在出来的文本编辑器中找到 GRUB_DEFAULT=0 一行,把0改为2(因为我的Windows 7在第三行),找到 GRUB_TIMEOUT=10 一行,修改时间10为3秒.3.保存,退出.4.重新在终端输入 sudo update-grub . copied from internet (http://www.kdfly.com/?p=41) FYI

使用Visual Studio 2008创建你的第一个Windows Mobile程序介绍

使用Visual Studio 2008创建你的第一个Windows Mobile程序介绍 Windows MobileMobileWindowsMicrosoftWinForm 介绍 Microsoft Visual Studio 2008 专业版或者更高版本提供了一个Windows Mobile程序开发环境,允许你使用本地代码(C / C++)或托管代码(C# / Visual Basic.NET)为Windows Mobile设备创建程序. 这篇文章将带你正确的安装Visual Studi

安装 Linux 与 Windows 10 双系统,你需要了解的一切

该选Windows 10还是Linux Mint?鱼与熊掌当然可以兼得,但咱们得掌握点小技巧才能顺利搞定. Windows 10绝不是唯一一款值得我们安装在自己计算机之上的免费操作系统.Linux只靠一块U盘就能顺利运行,而且完全无需对现有系统作出任何修改.当然,如果大家打算定期加以使用,最好也能在电脑上给Linux留出一席之地. 同时安装Linux发行版与Windows也就是大家常常提到的“双系统”方案,大家可以在每一次启动PC设备时选择自己要使用哪款操作系统.对于大多数人来说,这是安装Lin

VS2008下 使用C#做windows mobile 6.0开发 使用sqlite数据库

我使用的VS2008英文版的,不喜欢用中文版的. 现在用C#做相关开发,用到sqlite数据库. 网上找了很多,真正的教程特别少,都是贴的一堆垃圾代码.要么是无法配置通过的,错误一大堆,哎. 最后还是自己想办法解决了. 1.下载sqlite的运行库,首先网上的教程是让我们去http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki下载,但是页面上那么多,我们该选择哪个呢?   网页翻到最下面的  Legacy Ver

Windows Server 2008 R2使用WDS服务实现批量安装操作系统演示

昨天在51cto朋友圈看到有关WDS部署的演示,我参考上面的一步步来,发现诸多的问题的,其中在如何捕获封装好的windows server 2003时候遇到过一个问题,那就是制作winpe的启动镜像时候,我把它添加到安装镜像里头,发现添加始终报错,后来准备写一篇有关这方面的技术参考博文,发现想明白了,第二点就是在添加网卡驱动的时候,如果驱动程序包未经微软Windows实验室(WHQL)认证的签名是无法被安装的,这是棘手的问题,我相信任何问题都是有解决的办法的,只是时间问题,如果这个问题不能解决,

Windows + linux 双系统修改启动顺序

使用Windows + linux 双系统的用户可以使用如下方法修改启动顺序 我用的是Fedora 一.简单命令操作 1. 首先找到Windows的菜单menuentry. # cat /boot/grub2/grub.cfg | grep Windows 输出: menuentry 'Windows 7 (loader) (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-58D8931

[笔记]使用API函数 GetACP 获取Windows系统当前代码页

代码页是字符集编码的别名,也称"内码表",是特定语言的字符集的一张表.代码页分为两种:一种是ANSI代码页:另一种是OEM代码页. ⑴OEM代码页主要是用于Windows系统中的命令行界面(Console)程序,虚拟Dos. ⑵ANSI代码页主要是用于Windows系统中本地编码不是Unicode的图形用户界面(Gui)程序. procedure TForm9.BitBtn3Click(Sender: TObject); var cpInfoEx:TcpInfoEx; begin //

windows linux 双系统默认启动windows 的几种方法

装了双系统后,在开机时总会有想让一个系统默认启动的时候,一般安装完Ubuntu和XP双系统后,开机时默认的是启动Ubuntu系统,可是当想让XP作为默认启动的系统时怎么办呢? 在早期的Ubuntu系统中,启动管理器用的是grub,要改动开机默认启动的系统的,仅仅要改动/boot/grub/下的menu.lst即可了,可是在后来的Ubuntu系统中採用的是grub2,而grub2已经没有menu.lst文件了. grub2由三部分组成:/etc/default/grub文件 . /etc/grub