关于Flashd fscommand的破事[exec问题]

最近在帮一个学校做一个Flash多媒体教学方面的应用。
在开发过程中遇到一些小问题,解决之后感觉很有必要整理方便其他朋友少走弯路。

swf的权限太少。做flash应用要么就用AIR,要么就直接打包成exe[在发布设置里,点选windows放映文件即可生成内嵌播放器的exe文件]。
AIR当然是很猛很暴力。不过要求使用者安装有AIR的环境。但是估计听说过Flash AIR的人就不多。所以,还是老老实实发布exe来用吧。
虽然exe文件有操作本地文件的权利,被限制的太多。
我在开发的过程中就遇到这样一个问题:
当点击Flash中某个按钮时候,可能需要执行这样两个操作:
1、打开一个文件,
2、保存一个文件到本地。

如果打开的这个文件是exe,倒是好说。我们Adobe给了fscommand命令。通过fscommand(“exec”, 程序名称); 即可执行一个exe的。
但是客户的需求中需要打开的文件可能是一段视频,比如:avi、flv、wav等。那么通过exec就不行了。
还想浏览文件夹保存文件到本地?天方夜谭啊!

在使用exec的时候我还发现一个比较有意思的事情。如果这个exe文件是你自定义的。那么flash对路径有要求。
比如说:我自己做了一个1.exe。如果我要打包发布时候。这个1.exe必须放在flash同级目录fscommand文件夹下。
而且还不允许嵌套。只有这样才可以使用fscommand(“exec”, “1.exe”); 来调用。

+光盘目录
    +  main.exe
    +  fscommand
         +  1.exe
         +  tools
             +  2.exe

比如上边的目录结构,main.exe是flash生成exe。则我只能在这个flash中使用fscommand(“exec”, “1.exe”); 调用fscommand下的1.exe。
如果写fscommand(“exec”, “tools\\1.exe”); 则没有任何反应。千万不要说是我路径的写法有问题。你自己去实验一下就知道了。

既然打开exe可以通过fscommand来实现,那么打开视频呢。比如1.rm,比如1.avi?很明显,不能用exec来打开其他类型的文件。
不过需要说明的是,可以通过bat之类的文件来中转。比如编辑一个1.bat里边写“start 1.avi”。然后通过fscommand(“exec”, “1.bat”); 则可以打开1.vai.
不过比较遗憾的是有一个漆黑的cmd窗口一闪而逝。非常影响用户体验。搞的和木马病毒一样。

思考良久,决定通过一个没有任何界面的exe程序来做中转。
初步需求整理如下:
通过exec调用一个1.exe 传递两个参数给1.exe。告诉它“打开或者保存”,“程序或者其他任意类型的文件”。
找同事用c++搞了一个小程序给我。结果问题来了。
fscommand(“exec”, “1.exe open config.txt”; 无任何反应!exec居然无法传递参数。任何写法的参数传递都会导致无法启动1.exe。
Adobe大神在一边冷笑:“吖的叫你传递参数调用exe做中转和你自己操作有嘛区别?!爷只是允许你执行exe,可没叫你指挥exe~!”。

此路不通,退一步!我通过调用不通的exe来执行不通的操作总可以吧?!
问题又来了。每次新增一个操作。我就要重新编译生成一个exe文件。这也太麻烦了吧。我不烦。我同事也烦了。
最终确定需求,设计如下一个应用程序:
1、我可以使用直接复制的方式获得多个应用程序。
2、我需要实现的操作分为两种。打开和保存。
3、我需要实现的操作用一个专门的配置文件来管理。

最终我同事给了我这么两个文件:
1.exe
config.txt
我可以复制4个1.exe并对它们重命名得到:1.exe、2.exe、3.exe、4.exe、5.exe;
然后在config.txt中写入5条记录如:
open 01.avi
save 01.avi
open 02.ppt
save 02.ppt
save 03.rar
只要保证五个exe和config.txt在同级目录下。则五个exe文件会根据自己的名字去读取config.txt对应的行获得指令。
比如3.exe如果被执行,则会读取config.txt的第三行:open 02.ppt 意思是打开[open]相同目录下的02.ppt。

嗯~。世界清净了。

最后,爆个料。开始我是找另外一个同事用java做的。不过需要java的库。
程序才几百k,竟然要附带一个80多M的java环境。而且java都是先运行虚拟机。速度很慢。这个应用最后是刻录光盘。在光盘里运行就更慢了。
用了c++之后身轻如燕。速度也极快。。哎~ c++好东西啊。
看来以后有机会也要学习一下。

感谢收看,快乐愿意分享!woria2010…

附件下载:exec

————
后记:
当刻录成光盘之后,我发现这该死的exe运行不正常,似乎不能正确的读取配置文件。也许可软件运行环境有关系。
它是根据自己在任务管理器中的名称,如1.exe,2.exe等来确认自己读取那一条配置的。在硬盘上运行好像没什么问题。
但是刻到光盘上之后似乎所有的exe都只读取第一条记录。这里特别说明下。
关于打开文件夹,直接用打开浏览器相对目录及文件,可以借助浏览器打开。有什么疑问留言给我吧……