您的位置:首页 > 其它

单文档程序使用命令行参数方式打开

2008-09-26 16:51 309 查看
由于用户要求,博主需要实现交付给用户的两个应用程序只需要进行一次登录即可。有些类似于WEB下的单点登录。

这个问题,一个解决办法就是使用每个应用程序增加启动另一个应用程序的接口,使用命令行的方式启动,将当前应用程序登录用户的帐号作为命令行参数,另一个系统根据命令行参数判断是否需要显示登录界面即可。

在实际过程中,出现一个故障,就是会提示"can't find c:/landseagroup/jzh_yy"信息,然后系统崩溃。一开始摸不着头脑,怎么会有这个问题。然后在APP中逐步加断点(当然是用MessageBox大法),发现问题出现在

if (!ProcessShellCommand(cmdInfo))
return FALSE;

在这之后的消息没有弹出。

此时估计问题出在cmdInfo的数据成员中。因为jzh_yy是我传入的命令行参数,肯定被cmdInfo中的某个成员记录了下来。再次使用MessageBox大法,终于发现,cmdInfo.m_strFileName = jzh_yy。这个变量应该代表打开的文件名,而打开时根本就没有这个文件而崩溃(晕的是,MFC为啥要崩溃呢?如果发现指定的文件无法打开,完全可以打开一个空文档嘛)。

到这一步,光该m_strFileName的值显然不是解决问题之道,大家也许都知道,cmdInfo中有个成员变量,叫做m_nShellCommand,是个枚举类型,定义如下

enum { FileNew, FileOpen, FilePrint, FilePrintTo, FileDDE,
AppUnregister, FileNothing = -1 } m_nShellCommand;

此时调试得出,该变量的值为1,也就是FileOpen。至此已经明白问题的原因了。当使用命令行参数方式运行应用程序时,系统默认该参数是需要打开的文档文件(如果参数中指定了路径,则直接打开该文件;否则默认为打开当前目录下的文件),由于找不到文件而启动失败。

将m_nShellComand 修改为 cmdInfo.m_nShellCommand = CCommandLineInfo::FileNew;
一切都OK了。



特将此过程记录下来,以供他人参考。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐