nginx+redis应用服务架构搭建

事实上,两个东东功能独立。nginx作为开源的web服务器,可以用做反向代理等。而redis说白了就是一个内存数据库,存储键值对,可以多节点部署在多个物理机做为应用层,可以集群方式自动管理。可以不用重启,灵活增删节点等。
此处放在一起是因为工作中整理需要。当然,你可以分开阅读或借鉴。
前提:
CentOS6.5 x86_64
一,基础软件:有些并不是必须的补丁。
先用yum install -y XXX,如何需配置本地安装源有本站另外文档介绍。
如果没有yum那必须要有安装光盘的Packages文件夹了,里面是配套的软件包。用rpm -ivh XXX.rpm即可。
gcc的依赖如下:

cloog—–ppl
cpp—–mpfr
g++(gcc-c++)

libstdc++-devel
jdk

使用的openjdk的版本

把起作用的路径先设置成HOME路径,然后加入path。
如,java的默认路径是/etc/alternatives/jre_openjdk
#vi ~/.bash_profile
加入内容:
export JAVA_HOME=/etc/alternatives/jre_openjdk
export JRE_HOME=/etc/alternatives/jre
PATH=$JAVA_HOME/bin:$PATH:$HOME/bin
如下两个补丁包可以略,因为,在nginx的安装过程中也必须要源码编译安装。
PCRE
openssl-devel、pcre-devel、zlib-devel
zlib:
./configure
make
make install
ruby

libruby
ruby-libs
—-libreadline()
cd /path/ruby
./configure -prefix=/usr/local/ruby
make
make install
sudo cp ruby /usr/local/bin
事实上,用yum安装的话:yum install ruby,即可了
rubygems:

首先使用yum install rubygems来“投石问路”,就看到它所依赖的包,然后,在Packages目录里把rdoc和另一个包安装好,
最后,去网上下到了rubygems,
rubygems-1.3.7-5.el6.noarch.rpm
解压安装,成功。
没有yum的情况:
cd /path/gem
sudo ruby setup.rb
sudo cp bin/gem /usr/local/bin
gem-redis:

这是ruby和redis之间的桥,此时yum已经插手不上了。
方法一:
gem install redis –version 3.0.7
#由于源的原因,可能下载失败,就手动下载下来安装
#download地址:http://rubygems.org/gems/redis/versions/3.0.7
wget加url
方法二:
下载gem文件,在上面的url里一定会找到。
现场使用语句
gem install -l /root/tool/redis-3.0.7.gem
二,redis安装和运维:
安装集群:
tar -zxvf redis-3.0.7.tar.gz
mv redis-3.0.7 /usr/local/redis3.0.7
cd /usr/local/redis3.0.7
make
make install
cp /usr/local/redis-3.0.7/src/redis-trib.rb /usr/local/bin/
mkdir -p /usr.local/cluster
cp /usr/local/redis-3.0.7/redis.conf /usr.local/cluster
cd /usr.local/cluster
mkdir 7000
mkdir 7001
mkdir 7002
1)启动节点,或说实例,在/usr.local/cluster/
现行配置redis.conf如下:
daemonize yes
port 9001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
cd 7000;redis-server /opt/redis/conf/redis.conf > redis-0.log 2>&1 &
cd ../7001;redis-server /opt/redis/conf/redis.conf > redis-1.log 2>&1 &
cd ../7002;redis-server /opt/redis/conf/redis.conf > redis-2.log 2>&1 &
2)构建集群关系
#redis-trib.rb的create子命令构建
#–replicas 则指定了为Redis Cluster中的每个Master节点配备几个Slave节点
#节点角色由顺序决定,先master之后是slave(为方便辨认,slave的端口比master大1000)
—单机情况下:
redis-trib.rb create –replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
—双机情况下:
redis-trib.rb create –replicas 1 130.1.2.11:7000 130.1.2.11:7001 130.1.2.11:7002 130.1.2.12:7000 130.1.2.12:7001 130.1.2.12:7002
3)检测集群工作情况
  #redis-trib.rb的check子命令构建
#ip:port可以是集群的任意节点
redis-trib.rb check 1 130.1.2.11:7000
结果是:
[OK] All nodes agree about slots configuration.
>>> Check for open slots…
>>> Check slots coverage…
[OK] All 16384 slots covered.
说明运行正常了。或者redis-cli -c -p,-h 10.0.0.1 -p 后ping/PONG
现场抓图:
技巧:
重改配置时常用语句:
cd ../7002/;rm nodes.conf -f;mv redis.conf redis.conf.v0
三,nginx安装
版本:
在/root/tool/下进行解压和编译安装。
现场最终起作用的语句:
./configure –with-pcre=pcre-8.12 –with-openssl=openssl-1.0.1c –with-zlib=zlib-1.2.8 –with-poll_module –prefix=/home/linux/nginx/nginx-1.9.4/run –with-stream
make;make install
把安装路径加入到path中,export NGINX_HOME,参考上面java安装。即/home/linux/nginx/nginx-1.9.4/run。
配置文档如下:在/home/linux/nginx/nginx-1.9.4/run/conf下面,名为nginx.conf.
删除http节,如果发现已经存在stream节,即把同名的节替换即可。
stream {
    server {
        listen 80;
        proxy_pass app;
    }
    upstream app {
        server 130.1.2.11:4442;
        server 130.1.2.12:4442;
    }
    server {
        listen 81;
        proxy_pass appp;
    }
    upstream appp {
        server 130.1.2.11:6666;
        server 130.1.2.12:6666;
    }
    server {
        listen 82;
        proxy_pass apppp;
    }
    upstream apppp {
        server 130.1.2.11:4433;
        server 130.1.2.12:4433;
    }
}
.nginx的启动
nginx -c /home/linux/nginx/nginx-1.9.4/run/conf/nginx.conf
重启命令 nginx -s reload
关闭
  1.从容停止:kill -QUIT nginx主进程号 (注释:进程号查询方法;ps -ef|grep nginx 看master进程号)
  2.快速停止:kill -TERM nginx主进程号
  3.强制停止:pkill -9 nginx
测试端口是否开放,当然先装好nc工具
nc -z -w 1 127.0.0.1 8883
可以快速开放一个tcp端口,相当于建立一个socket server:
nc -l 8884
用这个命令开放某个端口穿越防火wall
iptables -I INPUT -p tcp –dport 82 -j ACCEPT
iptables -L -n | grep 82
service iptables save
四,业务程序:

yum本地安装源配置

使用yum要具备工具,所以,安装好这个包很重要。
在Linux下有了它,就像是光夫有机器猫,大圣有了金箍棒。
在/etc/yum.repo.d/目录下,一般会有四个文件。
…………CentOS_Base.repo——-网络源,要想在无网络状态下就要禁用它,重命名,加上.bak
…………CentOS_Media.repo—–这个就是光盘或挂载的文件了,修改它。
在baseurl 中修改第2个路径为/mnt/cdrom(即为光盘挂载点),注意,挂载点下面要有repodata/repomd.xml(这个是纽带)
将enabled=0改为1
然后保存,#yum update后就可以使用了。
注意,还包含一些很长文件名的文件。所以,即使没有光盘,可以把xml和长文件名文件拷出来放到系统内文件夹中。

道可道,非常道

老子的这六个字,想传达什么?我大胆的扯一下。
首先,它表达了,实践。因为道的部首是走。行走中悟,即是道。事实上,这已经足够,不必多言了。
任你大道无形,随你百般变化。非常道,此时就是指:不是永远不变的。
其次,它让大家意识到,道即变化和其中规律,注重规律,以及规律的规律,以及那些无法言语的规律。总结出来的规律的规律,才是不普通的道。此为“非常道”的第二个变种理解。
最后就是,还有四种字面上的硬解析了。百度转载而来。再加上,名可名,非常名的后半句。
(1):圣人之道是可以行走的,但并非是唯一不变的道路;真正的名声是可以去求得的,但并非一般人一直追求的名声。
(2):道是可以被说出来的,说出来的却不是永恒的道,万物是可以去命名的,但却不是万物永恒的名。——-同于本人归结的上面的实践要求
(3):道本身也是遵循着一定的“道”,但这个“道”并不是平时可以观测到的最基本的道,虽然对这个“道”也确实存在着,但不是以现有的道的维度所能解释的。——-让人们容易走火入魔
(4):道是道,不是道也是道。名是名,不是名也是名。两者同出,异名同谓。———得道即可得名,得名自然得道
惭愧仅扯出6条不同的分支,聪慧的人,估计36个心得都不在话下。老子,NB

windows核心编程(第5版)读书笔记一

第一章节 错误处理
几乎所有的windows API返回值都是下列之一:
VOID——不会失败,失败了骚扰bill gates去,
BOOL——不用说了吧,
HANDLE—失败则是NULL,当然有时是-1,
PVOID—–失败是NULL,成功就是指针喽,
LONG/DWORD—-要看具体的上下文环境了。
当调用失败,返回值会先指出已经发生错误。所以要先判断返回值。然后,使用GetLastError()来得到详细的错误提示。返回值是dword类型的,要得到描述,加入WinError.h.
技巧一:在监视中,$err,hr,就会看到调用的API错误的内容。
技巧二:使用VS的IDE小工具,error lookup
只你自己开发的模块想返回不一样的error时,可以使用SetLastError(DWORD)来写入,当然,错误代码要像点样,即32位中的29位要必须为1.而0是给系统用的。
第二章节 字符和字符串的处理
VC6——ANSI,DBCS——-/Zc:wchar_t(这个选项就会有定义wchar_t这个数据类型)
VS201X———–ANSI,UNICODE(指的是UTF-16)
事实上,typedef unsigned short wchar_t;
WinNT.h中统一了类型的名称。
TEXT(param)在unicode宏定义下,在param前加了L前缀。
所以,TCHAR也是个宏,可以配合TEXT(),_T() 来一起变脸。
unicode阵营的后缀或关键字母:
w—wide
L—-
ansi阵营的后缀或关键字母:
a—ansi
中性函数:或会变脸的,应用在两种编码下都可以编译场景,加入TChar.h配合String.h
_tcslen()会变脸成wcslen或strlen
C库的新版本的安全系列函数
1)字符串函数:加入StrSafe.h
_tcs拼加后面的选项即可cpy/cat/再拼接_s后才是安全字符串函数。第二参数为要处理的字符长度,用_countof宏(stdlib.h) 来得出字符数最好,注意不是字节数哟.
StringCch为前缀的也是安全函数。
注意:
使用微软包装的安全函数代替C库函数,好处是即时发现内存操作的异常,但有时也可能会出现“Debug Assertion Failed”对话框。当然要是debug模式下,当然也有办法屏了它,用release或定义InvailidParameterHandler函数,然后注册它,再程序运行开头加入个宏:_CrtSetReportMode(_CRT_ASSERT,0);
判断返回值必须等于宏S_OK,当不是这个值时必须要检查字符串的操作。
2)安全缓冲区函数:加入CrtDefs.h
memcpy_s——–wmemcpy_s
memmove_s——-wmemmove_s
第三章节 内核对象
有SECURITY_ATTRIBUTES结构为参数的生成才是内核对象,区别于GDI和其它的对象。
所以这也揭露了内核对象的本质是—-结构。而句柄则是—–由系统管理着的内存地址
CloseHandle()函数详析:
工作步骤:
1,验证自己主调进程中的句柄表,是否有权访问此句柄。如果有效,则获得内核对象的数据结构地址。
2,把内核对象结构使用计数减1,如果是0了,则销毁。
注意:
如果参数是无效的句柄,CloseHandle返回false,GetLastError返回ERROR_INVALD_HANDLE。如果在调试,则出现0xC0000008的异常抛出。
当函数返回前,清除当前进程的句柄表,所以以后代码不能再使用此句柄了。
当用变量保存过句柄的话,应该设置为NULL。
任务管理器是可以查看程序中的进程句柄表。
跨进程边界共享内核对象—略

windows核心编程(第5版)读书笔记二

第四章节 进程
进程内核对象在创建的时候总会处于未激发,无信号状态,但当进程终止时,系统自动会让进程对象变成激发状态,并且会永远保持这种状态。即回不到未激发状态。
C库会根据三个维度选择入口点函数:
编码,运行模式,运行环境
_tWinMain(WinMain)
wmainCRTStartup
_tmain(wMain)
_tmain(Main)
mainCRTStartup
wWinMainCRTStartup
WinMainCRTStartup
_tWinMain(wWinMain)
编码
ANSI
UNICODE
UNICODE
ANSI
ANSI
UNICODE
ANSI
UNICODE
运行模式
GUI
CUI
CUI
CUI
CUI
GUI
GUI
GUI
运行环境
WIN16
WIN32
WIN16
WIN16
WIN32
WIN32
WIN32
WIN16
在VC自有的C运行库的源代码中,crtexe.c中可以找到以上win16四个函数的源代码。
这些启动函数或者说入口函数的作用是:
1)获取指向新进程的完整命令行的一个指针
2)获取指向新进程的环境变量的一个指针
3)初始化C运行库的全局变量。如果包括了StdLib.h,就可以访问这些全局变量了。
4)初始化内存分配和IO底层
5)调用所有全局和静态C++类对象的构造函数。
系统接管,加载exe,dll到进程的一个地址空间(与链接器有关了),把这个地址返回给第一个入口函数的参数,即实例句柄。
下面可以玩这个句柄了,GetModuleFileName().
如果,你忘记实例句柄了,或没没放到全局里,不过没关系,可以用GetModuleHandle(param).参数可以是一个路径,最好是程序里用到的某个dll,要么,param就是NULL,这样就会得到运行着的当前进程的实例句柄。
命令行和环境变量,最好不要用C运行库初始化后的内容,万一时机没对,还没初始化你就读了,会出问题,所以window有厚道的API。GetCommandLine(),C运行库都在用,你凭啥找事儿,对吧。
技巧一:配合CommandLineToArgvW(GetCommandLine(),&nNum),可以得到友好的命令行参数。
这个配置和系统—》高级系统设置—》系统变量的内容是一致的。
入口点函数完后,就是进程的后事了,包括:
1)C运行库接管,调用自己的exit
2)调用_onexit()此前注册的任何一函数,假如你注册了的话。
3)调用所有全局和静态C++类对象的析构函数
4)如果有DEBUG则可以生成内存泄漏报告,可以深入去研究下。
5)C运行库来调用操作系统的ExitProcess函数,把入口点返回值以参数传入,即退出代码。这样系统就会杀死进程了,此函数返回值是void,它通知OS了,就应该无声息的over了。
注意,有时入口点返回,而有时线程可以调用ExitProcess和TerminalPorcess。
入口函数中显示使用ExitThread的函数,会让主线程退出,但如果其它线程还在工作呢?进程就不会退出,造成僵尸进程的凶手。
入口函数中显示使用ExitProcess的函数,会让C运行库函数没有执行清理资源的机会。
所以,最保险就是永远不显示的调用ExitX之类的函数。
更NB和危险的函数还有,那就是TerminalProcess,它厉害在它可以在某线程里被用,去干掉自己和别人的进程。

进程当前目录
这里要注意,因为,进程下的线程是有能力改写进程的当前目录,这也包括子进程。所以,要注意。
线程会通过GetCurrentDirectory()和SetCurrentDirectory()来存取路径。
做为进程,可以使用GetFullPathName()来看看现在的路径或者根据驱动器去环境变量里找到某路径。

windows核心编程(第5版)读书笔记三

第六章节 线程基础
创建线程,要使用_beginthreadex来代替WAPI提供的CreateThread。因为,要从编译器角度来创建。从用户角度至少看起来没有依赖OS。但事实上,里面还是用了CreateThread.
同样,杀线程,使用_endthreadex.
注:用以上两个库函数的原因是,因为,如果你用了signal函数,那么就要用_end函数来清理资源,可是那样,你就画不圆上下文了。同时使用时要注意有EX来标识的,因为存在着旧的弃用的函数。
CloseHandle是可以传已经被清理的或伪句柄的,只是它会返回false,并且对error置成ERROR_INVALID_HANDLE。
TerminalThread是异步的,只是发信号。要确定被杀的线程死了,要用WaitForSingleObject,向其传递线程句柄来守候。原理就是,线程的内核对象,当引用计数减为0时,会变成激发状态,有信号状态。
GetExitCodeThread是检查线程退出代码的。如果线程还没有退出,返回是STILL_ACTIVE宏的值。如果已经退出,返回true,并有相应值。
微软提供的C/C++库用于本机的开发。
libCMt.lib
库的静态链接发行版本
libCMtD.lib
库的静态链接调试版本
MSVCRt.lib
导入库,用于动态链接MSVCR80.dll(默认库)
MSVCRtD.lib
导入库,用于动态链接MSVCR80D.dll
MSVCMRt.lib
导入库,.net的托管/本机代码混合
MSVCURt.lib
导入库,.net的MSIL代码
线程句柄自获函数:
几乎所有的WAPI函数都要在第一参数传句柄的,所以,当你突然眼前一亮,想用WAPI了,这第一个参数必须难不住你呀。
HANDLE GetCurrentProcess();
HANDLE GetCurrentThread();
注意:以上两函数返回的是“伪句柄”
原因:
1)它们不会在进程句柄表中新建句柄,当然也不会影响引用计数。当然,CloseHandle()多释放一次,程序不死,只是它返回false。
2)它们返回的句柄要根据运行所在的进程和线程来关联。比如,在父线程中调用了,返回的句柄即使以参数传给子进程,则其指向仍然是子线程的。所以这一点有些像虚函数中的虚指针,只能意会不能言传了。
当然,有时用线程ID做些逻辑时,可以使用:
DWORD GetCurrentProcessId();
DWORD GetCurrentThreadId();
当然,如果你有了ID,你还可以换成句柄。
OpenThread(),下面示例一下转换办法并且,给出一个对进程优先级操作的技巧。
VOID SuspendProcess(DWORD dwProcessID, BOOL fSuspend)
{
     HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,dwProcessID);
     if(hSnapshot != INVALID_HANDLE_VALUE)
     {
          //walk the list of threads
          THREADENTRY32 te =  {sizeof(te)};
          BOOL fOK = Thread32First(hSnapshot, &te);
          for(; fOK; fOK = Thread32Next(hSnapshot, &te))
          {
              if(te.th32OwnerProcessID == dwProcessID)
               {
                    //主角登场
                    HANDLE hThread = OpenThread(THREAD_SUSPEND_RESUME, FALSE, te.th32ThreadID);
                    //略过对hThread的判断
                    if(fSuspend)
                         SuspendThread(hThread);
                    else
                         ResumeThread(hThread);
                    CloseHandle(hThread);
               }
          }//endfor
          CloseHandle(hSnapshot);
     }
}
最后,再赠送两个函数用于获取进程,线程运行的时间。
GetProcessTimes(),GetThreadTimes()
第七章节 线程调度,优先级和关联性
线程可以自己挂起,但不能自己恢复,并且,挂几次要应该恢复几次(ResumeThread)。挂起可以在线程生成时以参数传入,也可以用SuspendThread来人工自由操作。
第八章节 用户模式下的线程同步
技巧:
原子操作的系列WAPI函数:InterLocked*
+ExchangeAdd
+Increment
+ExchangePointer
volatile关键字,用来声明,后面的变量不能被优化,要去不断从内存来读取。
进阶一段:CRITICAL_SECTION结构和EnterCriticalSection和LeaveCriticalSection
要声明个全局的CS变量,然后用前初始,用后删除。
TryEnterCriticalSection比较灵活,做人当如此,能锁定就锁定段,没有段可用时,就立刻通知调用者。
同时,也不要把初始化关键段看低,因为,能避免交给内核态就晚点交,不然,上下文切换的步骤很耗时,耗资源的。所以,给初始化传值或用Set来设置抢段的重试时间,InitializeCriticalSectionAndSpinCount(p1,p2),p1是句柄了,p2大约4000。
注意:
线程抢锁的顺序要一致,否则死锁,即在锁包锁的情况下。
关键段的使用只能在一个进程内来控制其中众线程的同步,并且不能根据时间来等待。
进阶二段:条件变量
线程想把锁释放并把自己阻塞,就使用条件变量。
注意,这时,你得玩两个内核对象才行,即条件变量,必须配合锁。
首先看看这个阻塞函数,我特喜欢微软用sleep来前缀,因为,可读性很高。体现了两层意思:1,这是阻塞的,2,这是有时间参数的,时间到了没拿到条件变量就是false.
SleepConditionVariableSRW或SleepConditionVariableCS看吧,后缀又说明了要配合的锁。够意思。
我不够意思了,不列参数,自己去查手册喽。
有了Sleep就得有Wake吧。它会使等待同一个条件变量被触发的线程得到锁并返回。然后就干活呗,但得到锁了就得释放它。但它不会同时唤醒其它正在等待同一个条件变量的线程。
要看自己的实际需要。反正也是有WakeAll*和共享锁和独占锁来设计。
第九章节 内核态用内核对象进行线程同步
进程和线程内核对象在操作系统的处理上一样设计的。见笔记二的进程描述。
本章节介绍了另外的内核对象来帮助我们玩转线程同步。
1,事件
2,可等待的计时器
3,信号量
4,互斥量
头大吧,不过,我们要想掌握它,必须用不同的维度和结构去3D它。
首先,了解基础,或者说这个是第一个维度。
前进了解了进程和线程,有信号和无信号的规则,那么,这四个对象呢,look
事件:
引用计数器
自动重置/手动重置———–初始参数方式,CreateEvent
是否被触发——————-函数控制,SetEvent,ResetEvent
手动重置事件:
被触发时:等待此事件的所有线程都是会变成可调度状态。
自动重置事件:
被触发时:等待此事件的一个线程,只有一个线程会变成可调度状态。
因为自动重置会在一个线程得到事件对象后,自动把自己变成未触发状态。系统代劳的。
可等待的计时器:
指定时间或每隔一定时间触发
引用计数器
自动重置/手工重置——-初始化方式,CreateWaitableTimer,和事件一样没有其它的设置方式
SetWaitTimer是生成了内核对象后,需要进一步应用时的必经之路。因为,创建后,计时器都是属于未触发状态。
信号量:
引用计数器
最大资源量————-池里的资源总数
当前资源数————-目前应用了资源的数量,用RealseSemaphore来递增
互斥量:
引用计数器
线程ID———–内部自己管理,当计数为1时,则用调用的当前线程ID来填充。
递归计数———是否要触发

windows核心编程(第5版)读书笔记四

第19–20章节 dll的基础和高级技术
入口点函数:DllMain()
一般用来执行一些进程,线程有关的初始化和清理工作。要么不实现它,要么实现正常,返回true,否则,dll可能就不能被使用。
注意:
区分大小写的,否则就是无用的。
隐式调用dll时,系统启动时就会用到DllMain(),而显式调用时,在LoadLibraryex中来调用。并且,切入点是DLL_PROCESS_ATTACH
当引用了dll的exe要建立个新线程时,会检查所以已经被调入进程空间的dll的DllMain。并传入DLL_THREAD_ATTACH。有一个例外就是主线程切入仍以process来通知dll.

林李之战

古有瑜亮,今有林李。
又一个奥运,又一对宿敌。真过瘾,两个人撑起男子羽毛球的春秋,曾记得还有位狂人陶菲克,无耐掉队。今天,结果变成最不重要的结果,人们只是欣赏。他们告别生涯,我们告别青春。人生啊,有几次林李大战?事实上,我也没看几次,但江湖上有他们的传说,我有本林丹的自传而己。另一半区新秀双龙战。那个丹麦小伙,竟一口流利的中文,有点像湛龙的李宗伟。但成色略逊,难称德比 。湛龙孤独着是新时代篇章的前言。

为林李高兴,为知己喝彩。
今天的关键词是什么,坚持。为老将们笑着离开吧,且让他们释然吧!放下,享受~~,只为那更长的路。

自动关闭程序屏蔽windows对话框

windows server 2012关闭无响应程序对话框?
windows server 2012不提示是否要联机查找解决方案对话框?
只要干脆利落的自动关闭程序。那么follow me.有几点可以试试。
  • 关闭无响应程序
在Vista和Windows 7及以上的OS上,参照以下方法:
■在开始运行中输入regedit并回车
■定位到HKEY_CURRENT_USER\Control Panel\Desktop
■设置AutoEndTasks键值为1,如果没有可以手动创建一个名为 AutoEndTasks 类型为REG_SZ值为1的表项。
■WaitToKillAppTimeout是超时等待时间,默认值12000,这个值在很多网站上建议修改短一点,这里不推荐,最好不要改。因为程序的运行是综合的,影响超时的时间会很多,太短的超时时间可能会带来一些“莫名其妙”的问题。
如确认修改WaitToKillAppTimeout,请统一修改:
HKEY_CURRENT_USER\Control Panel\Desktop
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
下的WaitToKillAppTimeout,比如1000,2000均可以。
  • 关闭问题报告:
控制面板–系统和安全—操作中心—问题报告设置
点选“从不检查解决方案(不推荐)”
UAC设置方法/步骤:
你可以完全关闭UAC,在控制面板–系统和安全—操作中心中。也可以通过下面的步骤来设置它。(但要想干脆利落,你知道咋办)
1,点击控制面板,选择所有控制面板项,点击用户帐户
2,点击“更改用户账户控制设置”弹出计算机用户安全通知设置,始终通知(高):这是最安全的设置,收到通知后,你应该先仔细阅读每个对话框中的内容,然后才允许对电脑进行更改。
3,始终通知(中):如果系统允许对 Windows 设置进行更改而不通知你,则表明这种更改是安全的。但是,Windows附带的某些应用可以将命令或数据传递给它们,恶意软件可能会利用这一点,使用这些应用在电脑上安装文件或更改设置。应该始终小心允许在电脑上运行的应用。
4,始终通知(中低):与“仅当应用尝试更改计算机时通知我”相同,但是不会降低桌面亮度。如果选择此选项,则其他应用可能会影响用户帐户控制对话框的可视外观。这是一个安全风险,尤其是你的电脑上存在恶意软件时。
5,从不通知:这是最不安全的设置。将用户帐户控制设置为从不通知时,你便有效地关闭了用户帐户控制。这会使得你的电脑面临潜在的安全风险,这个设置一般在虚拟机练习时候设置
  • 关闭“已停止工作”对话框
 最近发现一个很早以前的程序出现了兼容性问题。程序有检测机制,发现异常退出可以自动重启。但是这次没有重启成功。操作系统是Windows 2008,以前用的操作系统是Windows 2003,在2003上就没有该问题。
后来发现2008和2003的错误报告机制不同。2008下,遇到程序崩溃会弹出一个错误提示对话框,需要手工关闭,程序才能退出。

临时解决问题的方法就是想办法关闭这个对话框。Windows有很多错误提示框,关了一个还会出现另外一个。
下面的方法可以关闭以下的几个对话框不再出现:
xxx已停止工作
xxx-应用程序错误
xxx-未找到调试器

需要修改三个地方:
1.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
在.NETFramework上点击右键-》新建-》DWORD(32-位)值-》
名称:DbgJITDebugLaunchSetting
数据:1
2.HKEY_CURRENT_USER\Software\Microsoft\Windows\Windows Error Reporting 修改两个值(修改第一个值也可退出,但是退出时间较长,测试环境需要1分钟左右,应该是在收集错误信息)
名称:DontShowUI    数据:1

名称:Disabled      数据:1
  • 关闭错误报告
下面这句在开始—-运行中键入,效果是关闭server的错误报告,适用于2008 server。可以用/query,/详细,/摘要,/summary来替换如下的禁用。
serverWerOptin /禁用
我发现了另外引导的 MSDN如何从用户可以抑制嵌入式系统上发生的系统和应用程序的错误信息。注册表中的位置是在以下默认情况下,该数值数据为0,我们应该将其更改为2设置为不可见的所有邮件。
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Windows\ErrorMode.
  • XP关闭无响应方案:
首先打开注册表:在[开始]–>[运行]–>键入[Regedit];  然后找到相关项目按照以下步骤进行设置:  左侧列表中依次展开,找到[HKEY_CURRENT_USER\ControlPanel\Desktop],这个就是设置软件无响应时的选项。将里面AutoEndTasks的数值从0修改为1就是让系统自动关闭无响应的软件。

文艺程序员的拙作

旧诗新用赋予深圳
远看山有色,近听水有声。
春去花还在,人来鸟不惊。
一去二三园,露营四五家,豪厕六七座,八九十枝花
风声
深圳无风起大潮
无声听雷领风骚
迷途小蜜蜂,菜花中深耕。
不知进超市,快乐嗡嗡嗡。
不惑之年,码仔之末。
以考代评,学渣宿命。
敲码半生,犹未之学。
奉旨架构,犹未所归。
一纸虚名,轻装再战。
知行合一,君子不器。
修炼品味,新辟战场。
期待志同,交流合作。
大南山登协活动
南山南四季如春,北乡碑思雨纷纷。
十峰有一君莫笑,待破楼兰金甲还。
春运归前心似箭,层层鲁缟拦路虎。
不知何时新冠止,退票游子尽望乡
红旗飘飘江河如画,家国同庆整装待发。
雷神舞锤怒海潜沙,儿女同心爱我中华。
英雄祭英雄,英雄继英雄,英雄记英雄,英雄跻英雄
中国国籍升值抢,羊肥蓠弱狼便想。
历史重演非吾辈。鬼子再来好猎枪。
解放南定澎湖日,家耻无忘告四方。
一言蔽之惧列强,全面支持军费涨。
川普为选转视线,印度鸡毛当令箭。
美国新冠六百万,中国疫情事过迁。
港独势力限港圈,反歧游行白宫占。
如今又来搞台海,多行不义必自害。
反社反人类已露,何必再造一纳粹。
你品你品得细品,请终结他的表演。
沁园春 庆贺铁科院建院70年
新年伊始,百业勤国,铁科先行。
看全国铁道,支援疫区;减免退改,保障交通。
70年如一,赤子之心,华夏龙脉再升腾。
鹏程举,基业强国富,举世无双。
贺祝昂扬创新70年,筑就综合性研院。
蒸汽变高铁,特区设院;员工同德,青春无悔。
和谐巍巍,复兴滚滚,青藏铁路立前沿。
铁科梦,聚千秋气运,盛世护航。
凌晨四点洛杉矶,骚扰乔丹短消息。
一代天骄两传奇,愿携爱女沐安息。
月枕烟花梢,小女吃蛋糕。
今朝亦有酒,胜却明日愁。
大沙河边走
大家河边走
大家大沙河边走
大家走的快,
全凭车头拉。
小强
–待补充
招安
不经长城,非好汉矣,
已至鹏程,方始万里。
打油诗
全家动员收晒被,大雨将至云压城。
小儿惊叹好风景,楼顶上诗纳风凉。
逼梁山,盼招安。雪中炭,倍知暖。来投诚,必献图。共谋业,宏图展。
阳台绿植合影平安大厦
小秧才摇细枝角,欲与塔尖试比高。
铅笔虽高稳若磐,怎耐灵生日寸长。
读诗经
锦时不诗经,恨己晚识情
不惑之年得,亦复更恋卿
唐宋大家八占三,进士兄弟皆学霸。
少年壮志妈姓程,大器晚成学渣爸。
深圳会展中心
潮流引领何时休,吸眼球会展周周。
手机爆容流量丢,腿抽差厅没转悠。
小钱此地不宜留,该出手时便出手。
日观古今中外秀,不辞城在岭南投。
户口之殇
车子诚可贵,房子价更高。
若为户口顾,一切皆可抛。
下缓兵之计,上修养生息
下兔死狗烹,上借尸还魂
两页三年得,一翻泪双流。
乾乾不戚戚,此外已无山。
楼高满地悠南山,
东坡荔枝引垂涎。
一户二年三行泪,
相与天伦东篱边。
程序员与李商隐
锦瑟无端五十弦,一弦一柱思华年。
–1K=1024b,1b=8bit。8421春夏秋冬。
庄生晓梦迷蝴蝶,望帝春心托杜鹃。
–举头望书山绝路,哄娃屏前叹华年。
沧海月明珠有泪,蓝田日暖玉生烟。
–华发早生有泪,黑发被剿长脸。
此情可待成追忆?只是当时已惘然。
–此生编码成奴畜,只怪毕业码易现。
大湾区
同室操戈,相煎何急。
同为大湾,人民之福。
得道如登,轻舟瞬过万重山。
失道固步,自封有如逆风行
深圳2019年中超开幕式
深城欲中超亮剑,老少酱油皆期盼。
草根起步得证见,实质名归城一线。
2019开工
越南越雪飞,彻底黑白灰
岭南春正好,问君何时归
教授二十载,无数影徘徊
今起相望去,枪手江湖迈
挑灯夜读太爷书墨
憾未福见太爷,偶幸得其手墨。
叹服先人用功,孙拜您含笑知。
买车篇
春风得意王朝宋,一劳永逸无限行。
一块玄铁千百度,得来实在费功夫。
实质名归自家姓,试水电动争先锋。
好事多磨终如愿,净化空气做贡献。
再别帝都
轻轻的我闪了,
正如2017你轻轻的来,
我轻轻的招手,
作别正奔忙赶来的霾。
挥一挥衣袖
不拿走一个口罩
—–即将二娃爹有感
举头望书山,哄娃叹华年。
屏幕代码间,顽bug躲冬寒。
升级版本:
举头望书山,哄娃叹华年。
屏幕代码间,顽bug躲冬寒。
一把辛酸泪,满屏珠玑难。
都云码农痴,谁解其中味。
再改:
举头望书山,哄娃叹华年。
满屏珠玑难,顽bug躲冬寒。
一把辛酸泪,屏幕代码间。
都云码农痴,谁解危机烦。或“所以然”
登塘朗山,梅林山
—-访深圳城中山
不爽墉朗眼前晃,撞日装强奔山上。
骑山迷路几累吐,相山不厌把持住。
东部华侨城游有感一
首批5A名传外,茶溪大侠镇王牌。
手机爆容手抽筋,终老择城机缘待。
东部华侨城游有感二
用心之深城称冠,赢在不比美景观。
岭南人杰办实事,朝气潮气中华愿。
妮妲
—–等台风
妮妲上门,搬好板凳。
泡壶普洱,直播台风。
—–遇台风
千呼万唤风满城,靠窗泡茶搬板凳。
深夜扫荡树根起,万物生后露笑容。
欠深圳的诗
——-出差中午出门吃饭
睛天烟雨蒙蒙中,唤醒吟诗神经虫。
闲云闪躲过不及,走出冰箱又湿蒸。
喷曼市德比北京比赛取消
——-一场热身在泥地里踢又如何呢?
狂人太狂,草皮太黄。
苦了粉丝,要骂他娘。
北京大雨
——黄色预警上班特8公交
各环泳道开,健车蝶泳来
会当特8顶,一览众比赛。
下班
——雨后元大都公园有感
烟雨大都缓颠簸,一天疲劳俱交割。
晴天骑行雨公交,路上小面再回窝。
饯行
—–回京前高中同学聚会
三班同学十年逢,深城厚意饯我行。
酒后雨过颜皆红,往事如烟暖心中。
出差7月下火
——于深圳红树林滨海大道
烈日囚吾下树荫,唯风蝉鸣探灼身。
此监无栏更锁人,去留不解美景真。
莲花山
—山顶遇雨
欲去雨留人,伟人脚下歇。
微润添凉爽,云丽深城春。
改诗
—-于北京郊区
松下睡亮子,妻儿寻趣去。
只在溪水边,人多不知处。
足球
—铁科杯赛第一场后
后卫酷一点,打平拿一分。
家人助一臂,队友齐一心。
—铁科杯赛第三场后
加班错过比赛,惭愧面对惜败。
来日方长磨砺,扬威通号亮剑。
训练
—赞队友
燕龙烧脑欲填诗,剩斗士们勇练习。
南国雨中念球队,愿拿东郊来祭旗。
泰国
—出发
天边鱼肚白,泰国又马来。
穿越两季节,小海岛晒晒。
车中语
—地铁上
中天雪枝低,移族触屏急。
越古北国景,嗟夫无往昔。
回家
—35岁生日下班路
抬头见月明,心已溢满情。
而立有五日,亮德佳川英。
—十一假期后旅游
人潮退,出游始。
春二首
—北京春天里
鸟鸣催床起,地铁踏歌挤。
无极分辨率,徒劳苹果七。
三月五彩帝都天,
柳满绿来花满山。
枫树无语暗思量,
我花发时柳无颜。
升级windows
—安装系统
重启复重启,win10又win7。
系统折腾夜,不成不甘心。
挤回龙观地铁
—北京生活
前不见站台,后不见队尾。
念寒风之悠悠,吾怆然而鼻涕下。
象棋
—闯关自赏
挑灯亮剑,连破残营。聊发少狂,谁与争锋。
少年
—校园生活
十月吾至爱,
真心今犹在。
寒风啸夜深,
谁暖此凉秋。