论坛首页
论坛首页 开发者论坛 PortableApps开发 如何处理需加载驱动(.sys)的程序?

如何处理需加载驱动(.sys)的程序?

讨论关于便携软件开发的技术与问题,包括PAL、NSIS、VMware ThinApp及其他。
evanevanus 两把菜刀
两把菜刀

帖子: 12
请问如何处理需要加载驱动(.sys)的程序?

软件举例:
1. 邮箱网盘:http://www.wodepan.com/index.htm
2. 金山T盘:http://www.1tpan.com/

David Pi 头像
建寨老工
建寨老工

帖子: 213

其实基于驱动的软件,基本很难做成真正的便携软件。因为:

1. 需要管理员权限。
2. 系统内如果已安装了这个软件,会很麻烦。只能跳过服务安装,或者无法运行。因为目前还没有现成的服务、驱动备份还原的方法。
3. 非正常退出后破坏较大。

如果一定要弄的话,PAL目前没有开启关于驱动、服务的功能。要用CustomCode来写。NSIS 安装驱动就有很多方法了。我一般用 SimpleSC.dll,或者用 nsExec/ExecDos 调用 sc.exe 系统命令也可以。首先检测系统中是否存在此服务,若不存在,则在启动时安装,在结束时卸载,若存在,可能可以通过重启服务等方式刷新配置。

jooseng 革命同志
革命同志

帖子: 3645
便携软件能否做的到起动时先检查系统中是否已经安装了相同软件。如果是的话,建议用系统的,如果需要安装驱动则拒绝运行,退出。

David Pi 头像
建寨老工
建寨老工

帖子: 213

jooseng 写道:
便携软件能否做的到起动时先检查系统中是否已经安装了相同软件。如果是的话,建议用系统的,如果需要安装驱动则拒绝运行,退出。


Advanced SystemCare Portable 就是这样的。检测到系统中存在服务则拒绝运行。

evanevanus 两把菜刀
两把菜刀

帖子: 12
那么请问如何才能加载 .sys?可以列举几种不同方式吗?如果只是用命令行或批处理怎么做?谢谢!

David Pi 头像
建寨老工
建寨老工

帖子: 213

用nsis插件的一个问题是,目前关于服务驱动的插件都是ANSI插件,我们制作便携软件用的是unicode版本的nsis,需要进行较为繁琐的编码转换后才能调用。所以用sc.exe是比较简单的方法。缺点是不好获得返回信息。
用sc.exe安装:

代码: 全选
sc.exe create "MyDriver" binPath= "C:\Windows\System32\Drivers\MyDriver.sys" DisplayName= "MyDriver" type= "kernel" start= "demand"
sc.exe start "MyDriver"


卸载:
代码: 全选
sc.exe stop "MyDriver"
sc.exe delete "MyDriver"


在nsis中用execdos执行即可。

evanevanus 两把菜刀
两把菜刀

帖子: 12
好像不是所有的.sys都可以用sc.exe加载。

David Pi 头像
建寨老工
建寨老工

帖子: 213

evanevanus 写道:
好像不是所有的.sys都可以用sc.exe加载。


一般程序需要加载的驱动都是服务型驱动,都可以用sc来加载吧。

evanevanus 两把菜刀
两把菜刀

帖子: 12
邮箱网盘(http://www.wodepan.com/index.htm) 以及 金山T盘(http://www.1tpan.com)里的 .sys 就不可以。


回到 PortableApps开发