for %%I in (*.jar)do ( echo --unzipping %%~nI 7z x %%I -o%%~nI ) pause
Tag Archives: Windows
Win7调试服务程序,Debugbreak函数不响应,直接退出
上周调试Win7下的一个服务程序,以前都是用Debugbreak()直接可以进入调试的,但这次直接退出了。
查了一下,这样设置一下就可以:
控制面板->操作中心->维护->检查问题报告的解决方案->设置
每次发生问题时,在检查解决方案之前先询问我
保存设置后,就可以进入断点了,再次鄙视微软。
后来,又发现,即使设置后,仍然无法响应断点,没办法,只好用比较挫的代码搞定了:
//在第一个DebugBreak()前面,添加下面的语句 while(!IsDebuggerPresent()) { Sleep(100); } DebugBreak();
这样,服务启动后,会一直等待调试器。启动服务后,手动通过VS、任务管理器或Process Explorer附加到进程,就可以对启动的服务进行调试了。
Evernote本地用户失效
今天打开Evernote后更新失败,并提示:
Synchronization failed. Invalid username or password.
除了升级了一下,还真没做什么,准备退出再登陆,又怕本地修改丢失,查了下,最后发现:
关闭Evernote后,运行命令行
Evernote.exe /NoLastLogin
重新登录就好啦:)
诡异的dll(2)
还是昨天,还是同一个哥们。他要实现一个语音叫号的功能,要先普通话叫号,然后再粤语叫号。
诡异的事情发生了,在调试状态下,怎么运行都是正常的,
但直接双击运行,只能叫第一种声音(粤语或普通话),另一个声音(粤语或普通话)怎么都发不出来。
悲剧的是,他语音叫号也是调用了一个dll。
只好慢慢调试了,开始以为是线程退出的太快,或者变量作用域问题,或变量中繁体中文乱码问题,或者函数退出太快,或者是release时优化掉了…
弄了一个多小时,没有任何进展。无奈之下,我翻出了Process Explorer,去查看环境变量。
结果调试的时候,第一个环境变量是
__COMPAT_LAYER=WinXpsp3
天啊,这不是兼容模式吗。
于是将exe设成兼容模式,双击运行,就好了。
原来,他用BCB6做开发,在Win7 sp1上无法正常运行,就设成了兼容模式,调试时运行的exe当然也继承了兼容模式的环境变量咯。
吐血啊……
回家,搜了一下__COMPAT_LAYER环境变量,可以设置为以下数值:
兼容性:
值 | 兼容模式 |
WIN95 | Windows 95 |
WIN98 | Windows 98 / Windows Me |
NT4SP5 | Windows NT 4.0 (Service Pack 5) |
WIN2000 | Windows 2000 |
WINXP | Windows XP |
WINXPSP2 | Windows XP (Service Pack 2) |
WINXPSP3 | Windows XP (Service Pack 3) |
WINSRV03SP1 | Windows Server 2003 (Service Pack 1) |
WINSRV08SP1 | Windows Server 2008 (Service Pack 1) |
VISTARTM | Windows Vista |
VISTASP1 | Windows Vista (Service Pack 1) |
VISTASP2 | Windows Vista (Service Pack 2) |
WIN7RTM | Windows 7 |
权限:
值 | 权限 |
RUNASADMIN | 以管理员权限运行 |
RUNASINVOKER | 以调用者权限运行 |
显示模式:
值 | 显示模式 |
DISABLETHEMES | 禁用视觉主题 |
640X480 | 用640×480屏幕分辨率运行 |
HIGHDPIAWARE | 高DPI设置时禁用显示缩放 |
256COLOR | 用256色运行 |
DISABLEDWM | 禁用桌面元素 |
另外,也可以通过注册表,设置程序的兼容模式:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] "D:\\TEST\\Hello.exe"="WINXPSP3"
HKEY hKey; LPCTSTR strSubKey = "Software\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers"; long lRet = ::RegOpenKeyEx( HKEY_CURRENT_USER, strSubKey, 0, KEY_WRITE, &hKey ); if ( lRet == ERROR_SUCCESS ) { TCHAR achValue[] = { _T("WINXPSP3") }; CString strExePath = _T("D:\\Test\\Hello.exe"); lRet = ::RegSetValueEx( hKey, strExePath, NULL, REG_SZ, (LPBYTE)&achValue, sizeof(achValue) ); RegCloseKey( hKey ); }
诡异的dll(1)
昨天,和哥们一起调试程序。由于上线压力较大,他最近一直在狂改程序,但遇到了一个问题:
从PACS Server取影像时,怎么都取不回来。
首先排查了PACS Server设置,发现稍微有些问题,修改配置后,我以前写的一个测试程序,
就可以正常取回影像了。
但诡异的事情发生了,我写的程序,可以查,可以取,但他写的就是无法取回影像,只能查询。
吐血啊。
经过了一个小时的奋战,实在发现不了问题,他决定把无线网卡禁用后再测一下,
结果就通了~~
原来他取影像用的是一个dll,估计这个dll中,启用监听的时候,会自动选用某一块网卡,
但刚好选了无线网卡,悲剧啊。
能不能不要自作主张选网卡啊~~
能不能调试的时候,先把不需要的网卡禁用了啊~~
Win2008下调试Service程序
Win2008下调试Service程序时,发现无法使用DebugBreak(),否则程序直接挂掉,无法进行调试。
有资料说是,修改错误报告的选项就可以修正这个问题了,尝试后发现无效,暂时只能一点儿一点儿调试了。
另外,Win2008上内存检测严格了很多,需要注意。
Windows网络地址无法访问
最近遇到了Windows网络地址无法访问的问题,总结了一下,解决步骤如下:
表现为:
用localhost可以访问本机共享地址
但用网卡ip就不可以访问
1、开启对应的服务(Services.msc)
TCP/IP NetBios Helper
Computer Browser
Workstation
Server
2、网卡
对应的网卡-》Properties
启用Internet Protoclo Version 4
启用File and Printer Sharing for Microsoft Networks
对应的网卡-》Properties-》Networking-》Internet Protoclo Version 4-》Properties-》General->Advanced->WINS->NetBIOS Setting->Enable NetBIOS over TCP/IP
3、共享设置
控制面板Network and Sharing Center
-》Advanced sharing settings
-》(Home or Work/Public)
Trun on network discovery
Turn on file and printer sharing
Turn off Public folder sharing
Use 128-bit encryptiong to help …
Turn on password protected sharing…
4、防火墙
先关闭,尝试是否可以联通
如果可以通过的话,允许网络共享就可以解决问题
5、查看组策略,看下是否有端口禁用配置
如果有的话,禁用该策略
6、如果还不行,还原网卡配置
netsh interface ip reset log.txt
重启,会丢失全部网卡配置信息
Tomcat7安装为Windows Service
Tomcat7采用服务模式运行,主要靠两个EXE和一个BAT文件:
Tomcat7w.exe用于配置、监控服务
Tomcat7.exe用于服务的安装、卸载、更新、运行、停止等
service.bat提供了一些预设的脚本方便大家安装卸载服务
1、Tomcat7w.exe //XX//ServiceName
#服务配置界面 Tomcat7w //ES//ServiceName #服务监控 Tomcat7w //MS//ServiceName
2、Tomcat7.exe //XX//ServiceName
#命令行运行服务 Tomcat7 //TS//ServiceName #启动服务 Tomcat7 //RS//ServiceName #关闭服务 Tomcat7 //SS//ServiceName #更新服务参数 Tomcat7 //US//ServiceName #安装服务 Tomcat7 //IS//ServiceName #删除服务 Tomcat7 //DS//ServiceName
其他可用参数有:
ParameterName | Default | Description |
---|---|---|
–Description | Service name description (maximum 1024 characters) | |
–DisplayName | ServiceName | Service display name |
–Install | procrun.exe //RS//ServiceName | Install image |
–Startup | manual | Service startup mode can be either auto or manual |
++DependsOn | List of services that this service depend on. Dependent services are separated using either # or ; characters |
|
++Environment | List of environment variables that will be provided to the service in the form key=value. They are separated using either # or ; characters. If you need to use either the # or ; character within a value then the entire value must be enclosed inside single quotes. |
|
–User | User account used for running executable. It is used only for StartMode java or exe and enables running applications as service under account without LogonAsService privilege. |
|
–Password | Password for user account set by –User parameter | |
–JavaHome | JAVA_HOME | Set a different JAVA_HOME than defined by JAVA_HOME environment variable |
–Jvm | auto | Use either auto (i.e. find the JVM from the Windows registry) or specify the full path to the jvm.dll. You can use the environment variable expansion here. |
++JvmOptions | -Xrs | List of options in the form of -D or -X that will be passed to the JVM. The options are separated using either # or ; characters. (Not used in exe mode.) |
–Classpath | Set the Java classpath. (Not used in exe mode.) | |
–JvmMs | Initial memory pool size in MB. (Not used in exe mode.) | |
–JvmMx | Maximum memory pool size in MB. (Not used in exe mode.) | |
–JvmSs | Thread stack size in KB. (Not used in exe mode.) | |
–StartMode | One of jvm, Java or exe. The modes are:
|
|
–StartImage | Executable that will be run. Only applies to exe mode. | |
–StartPath | Working path for the start image executable. | |
–StartClass | Main | Class that contains the startup method. Applies to the jvm and Java modes. (Not used in exe mode.) |
–StartMethod | main | Method name if differs then main |
++StartParams | List of parameters that will be passed to either StartImage or StartClass. Parameters are separated using either # or ; character. |
|
–StopMode | One of jvm, Java or exe. See –StartMode for further details. |
|
–StopImage | Executable that will be run on Stop service signal. Only applies to exe mode. |
|
–StopPath | Working path for the stop image executable. Does not apply to jvm mode. |
|
–StopClass | Main | Class that will be used on Stop service signal. Applies to the jvm and Java modes. |
–StopMethod | main | Method name if differs then main |
++StopParams | List of parameters that will be passed to either StopImage or StopClass. Parameters are separated using either # or ; character. |
|
–StopTimeout | No Timeout | Defines the timeout in seconds that procrun waits for service to exit gracefully. |
–LogPath | %SystemRoot%\System32\LogFiles\Apache | Defines the path for logging. Creates the directory if necessary. |
–LogPrefix | commons-daemon | Defines the service log filename prefix. The log file is created in the LogPath directory with .YEAR-MONTH-DAY.log suffix |
–LogLevel | Info | Defines the logging level and can be either Error, Info, Warn or Debug. (Case insensitive). |
–StdOutput | Redirected stdout filename. If named auto then file is created inside LogPath with the name service-stdout.YEAR-MONTH-DAY.log. |
|
–StdError | Redirected stderr filename. If named auto then file is created inside LogPath with the name service-stderr.YEAR-MONTH-DAY.log. |
|
–PidFile | Defines the file name for storing the running process id. Actual file is created in the LogPath directory |
3、service.bat安装卸载服务
service.bat install/uninstall/remove ServiceName
4、启动关闭服务
net start ServiceName net stop ServiceName
Win64中DSN问题
今天使用DSN时,发现了一个问题:
在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
原来是需要32位的DSN驱动,只要使用
C:\Windows\SysWOW64\odbcad32.exe
新建DSN就好了。
CMD常用命令12切换网络
1、切换为DHCP
@netsh interface ip set address name="本地连接" source=dhcp @netsh interface ip set dns name="本地连接" source=dhcp
2、切换为静态IP
@netsh interface ip set address name="本地连接" source=static addr=xxx.xxx.xxx.xxx mask=255.255.255.0 gateway=xxx.xxx.xxx.xxx @netsh interface ip set dns name="本地连接" source=static addr=xxx.xxx.xxx.xxx