技术帖:导航开机自动运行DSA的一个解决办法

不少英伦、海景和远景的车友现在正在使用上面这款导航
    大家喜欢一开机就启动DSA,它的提示对派款单还是有一定的拒绝作用。而这款机器没有自动进入导航的设置,而是自动进入最后一次使用的DVD、收音或音乐界面。我下面要做的是让它一开机就进入DSA。经过我和小琥几个月的测试使用已通过。其它有同样问题的导航仪,包括便携式的,只要是WinCE系统的,也可以试一试,无法使用的在安装时会有出错的提示。
    解决办法:
①先从网上下载我制作的安装程序包,地址: http://222.242.186.98/1984/install.rar
②将卡通过读卡器接在电脑上,将下载的安装包解压到存储卡中(如下图),然后正常退出存储卡。

③将卡插入到GPS卡槽中
④开机(不要按GPS键,已经启动了DSA或者导航地图程序的要退出来),进入导航一体机系统设置菜单


再进入选择导航路径子菜单,按图中黄色的“选择”按钮。

在弹出的文件选择框中,依次双击“StorageCard”、“install”文件夹、“install.exe”文件。设导航启动程序为install文件夹下的install.exe
完成后如下图所示:


⑤按GPS键执行install安装程序,出现下图的“安装成功”提示框后,按“OK”关闭弹出的小窗口。

⑥安装完成,再将导航启动程序改回为DSA.exe

大功告成。下次开车拧钥匙,再也不用按GPS键来启动DSA了。
 
---------------华丽的分割线---以下为实现方法供讨论-----------------
先说说原理:
    大家知道要WinXP开机自动执行一个程序,可以在注册表中写入一键值,指向硬盘上要执行的程序就行了。但WINCE如果你写一键值指向存储卡上的某个程序却无法做到,这是因为当WinCE执行到这个注册表项时,系统还没有调入存储卡的驱动,也就是说这时CE根本就不认存储卡,自然也就无法实现我们所要的开机就自动启动存储卡上的善领电子狗的目的。
    这款机器里面有一个64兆的内置闪存盘,用来保存它的系统程序和文件,我们开机所见到的车标就是存储在这个盘里,因此执行注册表自动启动项时,系统已经能够识别和读取这个盘,且还有38兆的空闲空间可用(可以把DSA拷进去,但因以后升级太不方便而放弃)。
    所以我写了一个MortScript脚本程序保存在这个盘中,用这个脚本再去调用存储卡上的DSA主程序,当然直接调用因为上面所讲的原因,肯定是不行的,所以在执行前延时7秒。
 
#--------------------
下面贴出重新修改的MortScript脚本的源代码,现在只有一个install.mscr文件,让大家在安装时更加自动化一些。增加了自动获取存储卡名、内置存储盘名、检查存储空间的功能,一般情况下不再需要修改脚本文件就能安装好,如果还是无法实现这个功能,则应该是你的机器无法支持或者你的内置存储空间使用的是一个不常见的文件夹名:
if (DirExists("\ResidentFlash"))
 ResidentName="\ResidentFlash"
else
if (DirExists("\NandFlash"))
 ResidentName="\NandFlash"
else
if (DirExists("\ResidentFlash2"))
 ResidentName="\ResidentFlash2"
else
if (DirExists("\ResidentFlash1"))
 ResidentName="\ResidentFlash1"
else
 message "安装被取消,你的导航仪没有内置存储盘","错误"
 Exit
endif
endif
endif
endif
Path1=SystemPath("ScriptPath")
path2="\"&Part(path1,"\",2)&"\DSA\DSA.exe"
Path3=SystemPath("ScriptPath")&"\DSARUN\DSARUN.exe"
Path4=SystemPath("ScriptPath")&"\DSARUN\DSARUN.mscr"
if (not FileExists(Path2))
 TXT="本程序要求善领安装位置为^LF^^LF^"&Path2
 message %TXT%,"错误"
 Exit
endif
if (FileExists(Path3))
 WriteFile(Path4,"if(FileExists("""&path2&"""))^CR^^LF^sleep 7000^CR^^LF^run("""&path2&""")^CR^^LF^endif",False)
##上一行生成DSARUN.mscr的脚本文件,设置等待7秒,以便系统加载SD卡驱动。如果机器还是无法自动执行,可尝试修改7000为更大一点的数值
 CardNamePath=path1&"\DSARUN\*.*"
else
 TXT="安装被取消^LF^^LF^“"&Path3&"”^LF^^LF^源文件不存在"
 message %TXT%,"错误"
 Exit
endif
if (FreeDiskSpace(%ResidentName%)<98304)
 message "内置存储磁盘空间不足,"错误"
 Exit
else
 XCopy(%CardNamePath%,ResidentName&"\DSARun",True)
 RegWriteString("HKLM","\init","Launch300",ResidentName&"\DSARun\DSARun.exe")
 message "安装成功,请重新设置导航路径","完成"
endif
Exit