如何写个wince服务程序,后台运行,不需要窗口

如何写个wince服务程序,后台运行,不需要窗口,第1张

如果你要开机就运行,只要它有窗口出现不管怎么样运行都会有窗口出现,如果程序是你自己写的话,你改一下就行了。要开机运行有一个简单的方法就是在下一个超级兔子,在魔法设置中的启动程序中添加这个程序就行了。

开发WinCE应用程序较多使用EVC,其界面与VC6类似

也可以使用VS2005开发

你可能还需要安装一个WinCE的标准SDK

关于调试:

WinCE设备可以通过Activesync与PC相连,然后在开发平台如VS2005下选择一些连接设备,选择Activesync连接方式,这时候,你再选运行调试就会自动下载到已经连接到Activesync的WinCE设备,可以单步调试,到这里就和调试PC上的应用程序没什么区别了

Windows CE60启动过程分析

在Windows CE 60中,内核(Kenerl)和OEM代码被分成oalexe、kerneldll和kitldll三个部分,其中启动代码(startup)和 OAL层的实现部分不再与内核链接生成NKexe,取而代之的是启动代码(startup)和硬件相关且独立于内核的OAL层的实现部分编译成 oalexe,而与内核相关且独立于硬件的OAL层代码包含在kerneldll中;内核无关传输层(KITL)的支持代码从OAL层分离出来编译成 kitldll。

从表面上看,好像只是代码重新组合了一下,从帮助 文档中BSP的移植过程看好像也是这么一回事,实际上,整个Windows CE 60内核布局发生了很大的改变。Windows CE 60的启动过程也是如此,如果你想按照Windows CE 50的启动顺序去分析Windows CE 60的启动顺序,可能会走到一个死胡同。主要是因为Windows CE 60在启动过程中调用了kerneldll和kitldll两个动态链接库的原因,而且Windows CE60不再编译生成KernKitlProfexe内核文件。

从Windows CE 60的帮助文档可以看出,WinCE60的启动只与oalexe和kerneldll有关,至于kitldll,只有将 *** 作系统编译成具有 KITL功能时才用到。分析Windows CE 60的启动过程实际上找到编译oalexe和kerneldll的源码位置。

首先看一下将WinCE60编译成诸如 WinCE50所说的基本内核情况,即kernexe。对于oalexe源码位置比较容易找到,因为oalexe是启动代码与硬件相关的OAL层 实现文件编译而成,所以只需在BSP的OAL目录中便能找到。而对于kerneldll,在BSP目录结构中,基本上无法找到kerneldll的编 译文件,所以必须从其他方面着手。

下面为WinCE 60的编译日志输出文件:makeimgout在文件复制过程的一部分:

Copying E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\oalexe to E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\nkexe for debugger Copying E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\kerndll to E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\kerneldll for debugger

从日志输出文件可以看出,在文件复制过程 中,WinCE60编译器将oalexe更名为nkexe,而将kerndll文件更名为kerneldll,也就是说,kerndll文件 的实现部分就是kerneldll的实现体。根据前面的分析,oalexe是与硬件相关独立于内核的OAL层的实现部分,而kerneldll为内 核相关独立于硬件的OAL层的实现部分。同样可以从最后整合后的二进制配置文件cebib文件中看出端倪。

; @CESYSGEN IF CE_MODULES_NK

nkexe E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\oalexe NK SHZ

kitldll E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\kitldll NK SHZ

kerneldll E:\WINCE600\OSDesigns\xsbase270\xsbase270\RelDir\XSBase270_ARMV4I_Release\kerndll NK SHZ

; @CESYSGEN ENDIF

而kerndll动态库在整个Windows CE60中没有显式编译过程,即没有一个sources文件有kerndll的编译过程,所以只能从 *** 作系统的编译文件Makefile中寻找其编译 过程。下面看一下$(_PUBLICROOT)\common\CESYSGEN\makefile中的部分内容:

nk::$(NK_COMPONENTS) $(NK_REPLACE_COMPONENTS)

@copy $(SG_INPUT_LIB)\oemstubpdb $(SG_OUTPUT_OAKLIB)

@copy $(SG_INPUT_LIB)\oemstublib $(SG_OUTPUT_OAKLIB)

set TARGETTYPE=DYNLINK

set TARGETNAME=kern

set RELEASETYPE=OAK

set DLLENTRY=NKStartup

set DEFFILE=NO_DEF_FILE

set TARGETLIBS=

set SOURCELIBS=%%NKLIBS%% $(SG_INPUT_LIB)\nkmainlib $(SG_INPUT_LIB)\fulllibclib

$(MAKECMD) /NOLOGO NOLIBC=1 kerndll

从上述代码中可以发现,原来kerndll动态库是从oemstublib编译而来,而且与nkmainlib有关。

在理顺了上述文件的相互之间的关系之后,再来分析Windows CE 60的启动过程可能就比较容易啦。

在理清了上述文件的关系之后,便可以分析任意一款基于ARM微处理器的Windows CE 60的启动过程,现在以深圳亿道电子技术有限公司开发的基于PXA270 ARM开发平台为例,分析Windows CE 60 *** 作系统启动过程。

1、Startup函数:

从Windows CE 60的帮助文档可以看出,WinCE60的启动只与oalexe和kerneldll有关,至于kitldll,只有将 *** 作系统编译成具有 KITL功能时才用到。分析Windows CE 60的启动过程实际上找到编译oalexe和kerneldll的源码位置。

oalexe的通过Startup函数完成硬件 的初始化。Startups代码与该硬件平台的Bootloader启动代码共用,其中PreInit函数主要完成将ARM处理器工作模式切换到管理员 模式、同时关闭MMU,并检测系统启动原因,如果是热启动、即在该函数调用之前已经启动了Bootloader程序,相当基本硬件初始化已经完成,则直接 跳转到OALStartUp函数中;否则需要进行硬件中断屏蔽、内存、系统时钟频率、电源管理等硬件的基本初始化过程。(具体过程见代码的分析)

设置目标或测试计算机是配置计算机以便进行自动驱动程序部署、测试和调试的过程。一个测试和调试环境具有两台计算机:主计算机和目标计算机。目标计算机也称为“测试计算机”。使用主机上的 Visual Studio 开发和构建驱动程序。调试程序在主机上运行并且位于 Visual Studio 用户界面中。当测试和调试驱动程序时,驱动程序在目标计算机上运行。

主计算机和目标计算机必须能够彼此按名称执行 ping *** 作。如果两台计算机已加入到同一工作组或同一网络域,则此 *** 作可能更容易。如果你的计算机位于工作组中,我们建议你使用路由器(而非集线器或交换机)连接计算机。不支持对虚拟机进行设置。

准备目标计算机以进行设置

在目标计算机上,安装将用于运行和测试驱动程序的 *** 作系统。

如果在 x86 或 x64 目标计算机上启用“安全启动”,则禁用该功能。

如果目标计算机使用 ARM 处理器,则安装 Windows 调试策略。则无需禁用“安全启动”。

在目标计算机上,运行与目标计算机平台匹配的 WDK 测试目标安装程序 MSI。可以在 Remote 下的 Windows 驱动程序工具包 (WDK) 安装目录中找到该 MSI。

例如:C:\Program Files (x86)\Windows Kits\10\Remote\x64\WDK Test Target Setup x64-x64_en-usmsi

如果目标计算机运行的是 N 或 KN 版本的 Windows,则安装适用于 N 和 KN 版本的 Windows 的媒体功能包。

如果目标计算机运行的是 Windows Server,请查找刚才通过 WDK 测试目标设置 MSI 创建的 DriverTest 文件夹。(例如:c:\DriverTest)。右键单击“DriverTest”文件夹,然后选择“属性”。在“安全”选项卡上,向“经过身份验证的用户”组授予“修改”权限。

验证主机和目标计算机可以彼此执行 ping *** 作。打开命令提示符窗口,并输入 ping 192186XX(ip_adress)。

如果主计算机和目标计算机已加入到一个工作组,但它们位于不同的子网上,你可能必须调整某些防火墙设置,以便主计算机和目标计算机可以通信。请按照下列步骤进行 *** 作:

两种方法(选一即可):

方法一:

在目标计算机上的“控制面板”中,转到“网络和 Internet”>“网络共享中心”。注意你的活动网络。它可能是“公共网络”、“私有网络”或“域”。

在目标计算机上的“控制面板”中,转到“系统和安全”>“Windows 防火墙”>“高级设置”>“入站规则”。

在入站规则列表中,查找用于活动网络的所有网络发现规则。(例如,查找所有“配置文件”为“专用”的网络发现规则。)双击每个规则,然后打开“作用域”选项卡。在“远程 IP 地址”下,选择“任何 IP 地址”。

在入站规则列表中,查找用于活动网络的所有“文件和打印机共享”规则。对于每个规则,双击该规则,将打开“作用域”选项卡。在“远程 IP 地址”下,选择“任何 IP 地址”。

方法二:

“控制面板”->“系统和安全”->“Windows防火墙”->"启动或关闭Windows防火墙"->"关闭Windows防火墙"

设置目标计算机

现在,你可以随时在 Visual Studio 中通过主计算机设置目标计算机。

在主计算机上,在 Visual Studio 的“Driver”菜单中,选择“Test”>“Configure Deivce”。

单击“Add New Device”。

在“Network host name”中输入目标计算机的名称。选择“Provision Device and choose debugger setting”。

选择某种调试连接类型,并输入所需的参数。

设置过程将需要几分钟时间,并且可能会自动重新启动目标计算机一到两次。设置完成后,单击“完成”。

WDK 10 与 Microsoft Visual Studio 完全集成。你可以使用 Visual Studio 开发环境生成驱动程序,也可以使用 Microsoft Build Engine (MSBuild) 直接从命令行生成驱动程序。

从 Windows 驱动程序工具包 (WDK) 8 开始,MSBuild 就已经取代了在早期版本的 WDK 中使用的 Windows 构建实用工具 (Buildexe)。现在,WDK 可使用与你用于构建 Visual Studio 项目相同的编译器和构建工具。使用早期版本的 WDK 构建的驱动程序项目必须进行转换才能在 Visual Studio 环境中工作。你可以从命令行运行转换实用工具,也可以通过从现有的源创建新的 Visual Studio 项目来转换现有驱动程序。

构建驱动程序主要有以下两种方式(选一即可)

方法一:使用 Visual Studio 构建驱动程序

构建驱动程序的方法与在 Visual Studio 中构建任何项目或解决方案的方法相同。当使用 Windows 驱动程序模板创建新的驱动程序项目时,该模板定义默认(活动)的项目配置以及默认(活动)的解决方案生成配置。

注意  你可以将使用 WDK 8 或 Windows 驱动程序工具包 (WDK) 81 所创建的项目和解决方案转换为适用于 Windows 驱动程序工具包 (WDK) 10 和 Visual Studio 2015。打开项目或解决方案前,请先运行 ProjectUpgradeTool。ProjectUpgradeTool 将转换项目和解决方案,以便可以使用 WDK 10 构建它们。

1、确保安装在你的计算机上的 SDK 和 WDK 的版本相同。

2、在 Visual Studio 中打开驱动程序项目或解决方案。

3、在“解决方案资源管理器”中右键单击解决方案,并选择“配置管理器”。

4、从“配置管理器”中,选择与你感兴趣的构建类型相对应的活动解决方案配置(例如,“调试”或“发布”)以及活动解决方案平台(例如,“Win32”)。

5、选择要构建驱动程序的目标 *** 作系统。导航到“驱动程序”>“常规”中的项目属性,然后设置 TargetVersion 属性。

6、为驱动程序或驱动程序包配置项目属性。   可以为部署、驱动程序签署或其他任务设置属性。

7、从“构建”菜单中,单击“构建解决方案” (Ctrl+Shift+B)。

方法二:

使用命令行构建驱动程序 (MSBuild)

你可以使用“Visual Studio 命令提示符”窗口和 Microsoft Build Engine (MSBuild) 来从命令行构建驱动程序。

使用“Visual Studio 命令提示符”窗口构建驱动程序

打开“适用于 VS2015 的开发人员命令提示符”窗口。

在此窗口中,你可以借助 MSBuildexe,通过指定项目 (VcxProj) 或解决方案 (Sln) 文件来构建任何 Visual Studio 项目。

导航到项目目录并为你的目标输入 MSbuild 命令。

例如,若要使用默认的平台和配置生成名为 MyDrivervcxproj 的全新的 Visual Studio 驱动程序项目,请导航到项目目录并输入以下 MSBuild 命令:

msbuild /t:clean /t:build \MyDrivervcxproj

语法 - 若要指定特定的配置和平台,请使用以下命令语法:

msbuild /t:clean /t:build ProjectFile /p:Configuration=<Debug|Release> /p:Platform=architecture /p:TargetPlatformVersion=abcd /p:TargetVersion=OS  

例如,以下命令将为“调试”配置、“Win32”平台和 Windows 10 生成一个通用 Windows 驱动程序。

msbuild /t:clean /t:build \MyDrivervcxproj /p:Configuration="Debug" /p:Platform=Win32 /p:TargetVersion=”Windows10” /p:TargetPlatformVersion=”100100100”

“TargetPlatformVersion”设置为可选项,并且允许你指定用于生成的工具包版本。默认值为使用最新的工具包。

使用 Visual Studio 中的选项增加构建输出详细信息的步骤

1、单击 Tools >  Options。

2、单击“项目和解决方案”文件夹并单击“生成并运行”。

3、更改“MSBuild 项目构建输出详细信息”和“MSBuild 项目构建日志文件详细信息”。 默认情况下,这些都设置为“最少”。

服务就是服务。程序就是程序。不是一个概念。服务是可以随系统一起启动的。而程序必须是系统启动完成才可以用的。服务可以用窗口,也可以没窗口。例如有些杀毒软件在系统启动时就开始查毒。而不是系统启动完成才运行。

以上就是关于如何写个wince服务程序,后台运行,不需要窗口全部的内容,包括:如何写个wince服务程序,后台运行,不需要窗口、如何开发arm开发板winceOS下运行的程序、wince6.0启动异砦新手求助等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9618535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存