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

由于用户要求,博主需要实现交付给用户的两个应用程序只需要进行一次登录即可。有些类似于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了。

 

特将此过程记录下来,以供他人参考。



 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐鹦鹉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值