在InstallShield中执行带空格路径的的exe(转)

环境:win7 32 日文操作系统,InstallShield2014JapaneseProfessionalComp

今天注册2个C#dll, 始终注册不成功。手工执行写好的cmd, 是成功的.

经过实验验证,是由于在带空格的路径中执行引起的.

 

解决方法有2种:

1. 使用函数转换成短路径名, LongPathToShortPath(STRING).

2. 在appAndwait的参数用""围起来.

 

稍后整理.

 

<2010_1227>

注册控件时也发现这一问题,如果不采用LongPathToShortPath(), 调用Regsvr32.exe 不带 /s 参数时,  可以看到路径名称 ' '被截断,

if(LaunchApplication() < 0)这句根本没用, 不能用来判断是否注册成功了. 看来还要调用自己写的注册控件的Dll.

#define REGSVR32_EXE WINSYSDIR^"regsvr32.exe"
export prototype HandInstall_Ocx();
function HandInstall_Ocx()
STRING strProg;
STRING strPathName;
STRING strCmd1;
begin
	//手动注册MyTest.ocx, 最终要执行的命令是 
	//c:/windows/system32/regsvr32.exe -s "x:/program files/xxSoft/bin/MyTest.ocx"
	SdShowMsg("正在注册MyTest.ocx...",TRUE);	                                   
	strProg = REGSVR32_EXE;   
	strPathName = TARGETDIR^"bin//MyTest.ocx";
	//LongPathToShortPath只能用来转换纯全路径名称, 如果加了参数, 转换就不成功
	LongPathToShortPath(strPathName);//转8.3文件名格式, DOS格式的长路径名称, 
	
	//把路径用/"前后围起来, 前面用了LongPathToShortPath, 这里其实不需要了
	strCmd1 = "-s /"" + strPathName + "/"";
	//MessageBox(strCmd1,INFORMATION);
    if(LaunchApplication (strProg, strCmd1, "", SW_HIDE, INFINITE, LAAW_OPTION_WAIT)<0)then
    	//实验证明, 无论成功,失败, 都不会进入到这里.
    	//这里是死代码了.
    	MessageBox("MyTest.ocx 控件注册失败!", SEVERE); 
    	abort;
    endif;                                              
    SdShowMsg("正在注册MyTest.ocx...",FALSE);
end;
转自:http://blog.csdn.net/lostspeed/article/details/6053814

参考:http://blog.sina.com.cn/s/blog_71dc20e80100m1of.html


PS:本人其实是创建一个快捷方式,但是看到这篇文章的LongPathToShortPath搞定了

创建快捷方式代码:

szItemName = "画面表示";
szCommandLine = "D:\test2014 abc\appl\a.exe";
szWorkingDir = "";
szIconPath = "";
nIcon = 0;
szShortCutKey = "";
nFlag = REPLACE;
LongPathToShortPath(szCommandLine);
szProgramFolder = FOLDER_DESKTOP;
AddFolderIcon (szProgramFolder, szItemName, szCommandLine, szWorkingDir, szIconPath, nIcon, szShortCutKey, nFlag);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值