单文档程序使用命令行参数方式打开
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了。
特将此过程记录下来,以供他人参考。
这个问题,一个解决办法就是使用每个应用程序增加启动另一个应用程序的接口,使用命令行的方式启动,将当前应用程序登录用户的帐号作为命令行参数,另一个系统根据命令行参数判断是否需要显示登录界面即可。
在实际过程中,出现一个故障,就是会提示"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了。
特将此过程记录下来,以供他人参考。
相关文章推荐
- 如何使用Java程序打开一个Word文档?
- MDI程序、文档最大化方式打开
- [转贴]右键→打开方式→选择程序,无法使用的解决方法
- 跳过window无关联时弹出的[使用web服务查找合适的程序]对话框,直接显示打开方式对话框
- 当程序用ado的jet4.0方式连接的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”,而用odbc方式不报错,小阴沟里翻船,郁闷中然后查文档解决之
- 使用Python为程序添加右键菜单打开方式
- 当程序用ado的jet4.0方式连接的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”,而用odbc方式不报错,小阴沟里翻船,郁闷中然后查文档解决之
- 右键菜单的“打开方式―选择程序”功能不能使用
- 备忘:在VC++单文档程序中,使用自己的命令行参数
- 修复OS X的Finder中文档 打开方式中重复程序的问题
- 当程序用ado的jet4.0方式连接的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”,而用odbc方式不报错,小阴沟里翻船,郁闷中然后查文档解决之
- 使用单文档视图结构把Word嵌入到VC程序中
- C#语法——泛型的多种应用 C#语法——await与async的正确打开方式 C#线程安全使用(五) C#语法——元组类型 好好耕耘 redis和memcached的区别
- asp.net使用ODP即oracle连接方式的的防注入登录验证程序
- 如何使用 WebBrowser 控件在 Visual C# 2005 或 Visual C# .NET 中打开 Office 文档
- VB使用shell函数打开外部exe程序的实现方法
- 修改文本文档的默认打开程序,不更改之前图标
- Cmd使用方式--命令行运行程序
- 使用VBS打开程序和关闭程序
- VS2008编写的程序使用更低版本VS打开