shell编程怎么调试
shell编程如何调试
前几天刚接触shell编程,做了个小玩意,右键菜单获得文件夹占用空间大小
不清楚如何进行shell编程的调试,耽误了很多时间。首先说明下我的操作系统是win7,开发环境visual studio 2008
主要问题:
1、注册了dll,无法重新编译,开始是注销重进,后来发现重启explorer.exe也可以。
看windows shell扩展编程完全指南上就此提得方案不管用,方案如下:
要让 Explorer 更迅速地卸载Shell扩展执行文件,需要创建如下注册表项:
HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\AlwaysUnloadDLL
并将其值设为 "1". 对于Win9x, 这是你能做的最好的方法。
而在Win NT/2000上, 你可以找到如下键:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer
并创建一个名为DesktopProcess的DWORD值 1. 这会使桌面和任务栏运行在同一个进程中, 而其他每一个 Explorer 窗口都运行在它自己的每一个进程内. 也就是说,你可以在单个的Explorer 窗口内进行调试, 而后只要你关闭该窗口,你的DLL就会被马上卸载, 这就避免了因为DLL正被Windows使用而无法替换更新. 而如果不幸出现这种情况,你就不得不注销登录后再重新登录进Windows从而强制卸载使用中的Shell扩展DLL.
可能不适用于win7操作系统的缘故。
2、同样是windows shell扩展编程完全指南提到调试shell扩展的方案不管用,调试方案
打开你的工程设置, 在 Debug 页” Executable for debug session”编辑框中输入浏览器程序的全路径, 如:"C:\windows\explorer.exe".
如果你使用的是 NT 或 2000, 并且你已经设置了上述的 DesktopProcess 注册键, 那么当你按F5进行调试时就会打开一个新的浏览器窗口.
只要你在这个窗口内完成你所有的工作,当你关闭该窗口时扩展同时会被卸出内存,这样就不会防碍我们重建 DLL了.
在Windows 9x上, 在重新调试之前你不得不关闭Shell. 你可以: 点击 “开始”, 再点击”关闭”. 按住 Ctrl+Alt+Shift 并点击”取消”.
这样就会关闭Shell, 你会看到桌面消失了.
接着,你可以切换到 MSVC 再按 F5进行调试. 要中止调试, 按 Shift+F5 关闭. 完成调试后, 你可以从”开始 运行” Explorer.exe以正常重起.
我运用之后的效果是,程序一启动,打开一个新的浏览器窗口就自动退出了(不过至少是生效了)。而且我发现OutputDebugString也不管用。
3、弱弱的问下,在vs2008下如何建立atl工程,并在这个工程之上进行shell扩展编程?我的是在vc6.0的工程基础上改的,两者差太多了,网上搜索到的shell编程都是基于vc6.0的。
谢谢~一下子问了这么多问题,分不够可以加分。
------解决方案--------------------
mark
------解决方案--------------------
顶起,我以前调试直接用比较笨的方法,写个reg文件 不过每次都的结束explorer.exe
------解决方案--------------------
shell依赖于explorer.exe,这是一个思路。
Shell扩展是被Explorer调用起来的,所以,首先要把你的工程的调式进程设置为Explorer.exe。
由于当Shell扩展被Explorer用后,它会在内存中呆上一段时间,这会使你无法重新编译并生成Shell扩展DLL文件。
注册表中找到 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer,创建一个名为DesktopProcess的DWORD值,值设置为1。这会使桌面和任务栏运行在一个进程中,而其他每一个Explorer窗口都运行在各自的进程内。所以这样,你可以在单个的Explorer窗口内进行调试,而后只要你关闭该窗口,你的Shell DLL就会被强制卸载掉,这样就避免了因为你的DLL正被Windows使用而无法更新。
接着,在你的Shell DLL工程中设置断点,点击调试按钮,待到Explorer窗口出现时,找到某个文件,右击弹出扩展,OK,你发现它断下来了。
------解决方案--------------------
soliddream66,
按《windows shell扩展编程完全指南》上讲的关于调试的方法是可行的,可以参考前面几位朋友的回帖。
我是在XP SP2,vs2008环境下调试的。
另外《windows shell扩展编程完全指南》中的例子在vs2008上可以用,只是编译时会遇到各种问题,需要一一解决,但都不是大问题。
你提到的"获得文件大小,薛满超"这篇文章我找不到,能否提供链接?
多谢!
前几天刚接触shell编程,做了个小玩意,右键菜单获得文件夹占用空间大小
不清楚如何进行shell编程的调试,耽误了很多时间。首先说明下我的操作系统是win7,开发环境visual studio 2008
主要问题:
1、注册了dll,无法重新编译,开始是注销重进,后来发现重启explorer.exe也可以。
看windows shell扩展编程完全指南上就此提得方案不管用,方案如下:
要让 Explorer 更迅速地卸载Shell扩展执行文件,需要创建如下注册表项:
HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\AlwaysUnloadDLL
并将其值设为 "1". 对于Win9x, 这是你能做的最好的方法。
而在Win NT/2000上, 你可以找到如下键:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer
并创建一个名为DesktopProcess的DWORD值 1. 这会使桌面和任务栏运行在同一个进程中, 而其他每一个 Explorer 窗口都运行在它自己的每一个进程内. 也就是说,你可以在单个的Explorer 窗口内进行调试, 而后只要你关闭该窗口,你的DLL就会被马上卸载, 这就避免了因为DLL正被Windows使用而无法替换更新. 而如果不幸出现这种情况,你就不得不注销登录后再重新登录进Windows从而强制卸载使用中的Shell扩展DLL.
可能不适用于win7操作系统的缘故。
2、同样是windows shell扩展编程完全指南提到调试shell扩展的方案不管用,调试方案
打开你的工程设置, 在 Debug 页” Executable for debug session”编辑框中输入浏览器程序的全路径, 如:"C:\windows\explorer.exe".
如果你使用的是 NT 或 2000, 并且你已经设置了上述的 DesktopProcess 注册键, 那么当你按F5进行调试时就会打开一个新的浏览器窗口.
只要你在这个窗口内完成你所有的工作,当你关闭该窗口时扩展同时会被卸出内存,这样就不会防碍我们重建 DLL了.
在Windows 9x上, 在重新调试之前你不得不关闭Shell. 你可以: 点击 “开始”, 再点击”关闭”. 按住 Ctrl+Alt+Shift 并点击”取消”.
这样就会关闭Shell, 你会看到桌面消失了.
接着,你可以切换到 MSVC 再按 F5进行调试. 要中止调试, 按 Shift+F5 关闭. 完成调试后, 你可以从”开始 运行” Explorer.exe以正常重起.
我运用之后的效果是,程序一启动,打开一个新的浏览器窗口就自动退出了(不过至少是生效了)。而且我发现OutputDebugString也不管用。
3、弱弱的问下,在vs2008下如何建立atl工程,并在这个工程之上进行shell扩展编程?我的是在vc6.0的工程基础上改的,两者差太多了,网上搜索到的shell编程都是基于vc6.0的。
谢谢~一下子问了这么多问题,分不够可以加分。
------解决方案--------------------
mark
------解决方案--------------------
顶起,我以前调试直接用比较笨的方法,写个reg文件 不过每次都的结束explorer.exe
------解决方案--------------------
shell依赖于explorer.exe,这是一个思路。
Shell扩展是被Explorer调用起来的,所以,首先要把你的工程的调式进程设置为Explorer.exe。
由于当Shell扩展被Explorer用后,它会在内存中呆上一段时间,这会使你无法重新编译并生成Shell扩展DLL文件。
注册表中找到 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer,创建一个名为DesktopProcess的DWORD值,值设置为1。这会使桌面和任务栏运行在一个进程中,而其他每一个Explorer窗口都运行在各自的进程内。所以这样,你可以在单个的Explorer窗口内进行调试,而后只要你关闭该窗口,你的Shell DLL就会被强制卸载掉,这样就避免了因为你的DLL正被Windows使用而无法更新。
接着,在你的Shell DLL工程中设置断点,点击调试按钮,待到Explorer窗口出现时,找到某个文件,右击弹出扩展,OK,你发现它断下来了。
------解决方案--------------------
soliddream66,
按《windows shell扩展编程完全指南》上讲的关于调试的方法是可行的,可以参考前面几位朋友的回帖。
我是在XP SP2,vs2008环境下调试的。
另外《windows shell扩展编程完全指南》中的例子在vs2008上可以用,只是编译时会遇到各种问题,需要一一解决,但都不是大问题。
你提到的"获得文件大小,薛满超"这篇文章我找不到,能否提供链接?
多谢!