VS2008 C#用manifest提升程序权限后,调试时还是不行,求解

VS2008 C#用manifest提升程序权限后,调试时还是不行,求解,第1张

F5键启动的是 <你的程序名>.vshost.exe

和双击时不同

你需要修改安装钩子的代码以适应文件

我遇到过这个问题

当然,你可以通过项目属性设置不使用vs宿主来调试

但这回使部分调试功能不可用

比如编辑并继续等

此时查看日志,在运行目录下会看到一个名为debug.log的文件,看一下哪里出现问题。

原因是无法加载manifest文件从而无法处理 *** 作系统的版本问题,vs2008版本还有生成manifest文件,VS2013以后就没有了。

手动添加manifest文件,在此项目的更目录下创建一个 ***.manifest文件。

根本不是。net的问题,我在网上找到的解决方案:

VC2005编译出来的程序文件,采用了manifest方式来指定dll文件。对于win98、win2000系统,把exe文件和VC的 dll连接库放到一起就成了。对于winxp、win2003系统就要麻烦的多了,VC的连接库默认是被放到了winsxs目录下,结果造成在这些系统上,直接拷贝exe文件,往往是不能运行(找不到msvcr80.dll、mfc80.dll文件等),或者在事件日志中报错。

解决方式:

方式一、在目标系统上安装2005版vcredist_x86.exe。

方式二、直接拷贝VS8目录下的VC \ redist \ x86 \ 目录下的 Microsoft.VC80.MFC、Microsoft.VC80.CRT、Microsoft.VC80.MFCLOC几个文件夹,到exe所在的目录下,目录结构如下:

.\myapp.exe

.\myapp.dll

.\Microsoft.VC80.CRT\

.\Microsoft.VC80.MFC\

.\Microsoft.VC80.MFC\Microsoft.VC80.MFCLOC\

然后修改Microsoft.VC80.MFCLOC目录下的Microsoft.VC80.MFCLOC.manifest文件,将其中的version="8.0.50727.42",修改为version="8.0.50608.0"。

方式二的目录结构,在xp和2003下是没有问题的,但是在win98/win2000中,因为exe和dll不在同一目录下,就会出现找不到dll的问题。

有什么更好的解决呢?呵呵,国外的一个大牛(http://blog.kalmbachnet.de)找到一绝招:

方式三、

1、首先编译myapp.exe的时候,在配置中,选择生成单独的manifest文件,如:myapp.exe.manifest。

2、将myapp.exe、myapp.exe.manifest拷贝到一个目录下

3、将Microsoft.VC80.MFC、Microsoft.VC80.CRT、Microsoft.VC80.MFCLOC几个目录下的文件,都拷贝到myapp.exe所在的目录下。

4、将Microsoft.VC80.MFCLOC.manifest文件中的version="8.0.50727.42",修改为version="8.0.50608.0"。

5、编辑myapp.exe目录下的所有 .manifest文件,将文件中的publicKey键值删除,一般是publicKeyToken="1fc8b3b9a1e18e3b"

6、然后运行myapp.exe看看,嗯。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7971723.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存