windows mobile ,wince 系统,用代码启动cab文件安装
Posted LoveCoder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(); // } //} }
以上是关于windows mobile ,wince 系统,用代码启动cab文件安装的主要内容,如果未能解决你的问题,请参考以下文章
如何检查设备运行的是 Windows CE 还是 Windows Mobile?
将 Windows CE 应用程序移植到 Windows Mobile