VS2005-正在创建项目"XXX",创建项目失败与FireFox、组策略
最近因工作需要开发智能设备项目,在打开一些VC++的sample时没有问题,但是自己着手创建项目时,出现以下问题:在选择设备类型时,选择任何一个VC++的智能项目,都会在状态栏显示“正在创建项目‘XXX’,创建项目失败”。耽搁了好几天,一直没能解决,无法找到错误日志,也想不明白啥原因。
看来今天运气不错,用半调子英文把错误信息转成" smart device, project creation failed" google了一下,很快就找着答案了。
Are you having issues creating native projects?
原来又是IE在作怪,早把IE抛弃了,它还是来坑人,烦的狠啊。说明:{D245F352-3F45-4516-B1E6-04608DA126CC} 指的是
D:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjWiz.dll,由于IE的安全机制把HTML的向导页面禁止了。
照着解决办法做了一遍,啊哈,怎么还不行?不过心里已经基本有底了, JeffAbraham中讲的是IE7,而我的还是IE6啊,会不会是偶用FireFox的原因?把默认浏览器改成该死的IE(并启用IE选项中的脚本调试,否则还是老样子),再次创建项目,出现JS错误,如下图:
只能调试了,common.js 4039行附近的代码如下:
1 /******************************************************************************
2 Description: When constructing a class name based on project or other user input,
3 Warn user (MessageBox) if the generated class name is a reserved name, and
4 add one digit to the name to avoid the reserved name.
5 Ex: User names the project "Atl" --> C+Atl+Module is a reserved name -->
6 Warning MessageBox plus generated name is CAtl1Module.
7 strPrefix: The first part of class name (Ex: project name - Atl).
8 strPostfix: The second part of class name (Ex: Module).
9 ******************************************************************************/
10 function ConstructClassName(strPrefix, strPostfix)
11 {
12 var strCandidate;
13 strCandidate = "C" + strPrefix + strPostfix;
14 for(var i = 1; i<=10; i++)
15 {
16 var bValid = (window.external.dte.VCLanguageManager.ValidateIdentifier(strCandidate) &&
17 !window.external.dte.VCLanguageManager.IsReservedName(strCandidate));
18 if(!bValid)
19 window.external.ReportError();
20 else
21 break;
22 strCandidate = "C" + strPrefix + i.toString() + strPostfix;
23 }
24 return strCandidate;
25 }
26
原来window.external.dte对象为空,这又是什么原因呢?2 Description: When constructing a class name based on project or other user input,
3 Warn user (MessageBox) if the generated class name is a reserved name, and
4 add one digit to the name to avoid the reserved name.
5 Ex: User names the project "Atl" --> C+Atl+Module is a reserved name -->
6 Warning MessageBox plus generated name is CAtl1Module.
7 strPrefix: The first part of class name (Ex: project name - Atl).
8 strPostfix: The second part of class name (Ex: Module).
9 ******************************************************************************/
10 function ConstructClassName(strPrefix, strPostfix)
11 {
12 var strCandidate;
13 strCandidate = "C" + strPrefix + strPostfix;
14 for(var i = 1; i<=10; i++)
15 {
16 var bValid = (window.external.dte.VCLanguageManager.ValidateIdentifier(strCandidate) &&
17 !window.external.dte.VCLanguageManager.IsReservedName(strCandidate));
18 if(!bValid)
19 window.external.ReportError();
20 else
21 break;
22 strCandidate = "C" + strPrefix + i.toString() + strPostfix;
23 }
24 return strCandidate;
25 }
26
修改IE的管理加载项,竟然发现所有加载项被禁用,并且无法启用,RadioButton都是灰色的(费了好几个小时找原因,原以为是我用了TotalCommander中的注册表优化功能引起的,后来证明不是)。原来,很久很久以前,我装完机器之后设置了组策略-“除非在加载项列表中特别指定,拒绝所有加载项“(位置:组策略-用户配置-管理模板-Windows组件-Internet Explorer-安全功能-加载项管理)。修改过来,重新启动VS2005,并创建VC项目,终于看到可爱的向导了。