win32 下,默认 child process 都是继承 parent process 的环境变量的,除非你在 ::CreateProcess 里设定新的参数。但被 Vista UAC 保护的应用程序,并不继承环境变量,也不知道还有啥其他的问题。
c:\> set MYENV=hello
c:\> mytest.exe
MYENV=nil
mytest.exe 程序就是简单的 getenv() 却啥也没有。
下面的状态,就说明你的程序被 UAC 了。fuck vista~~
豪仔有篇绕过 UAC 的方法,学习了~
http://happyiww.popo.blog.163.com/blog/static/92244832009225103656656/根据豪仔的介绍,一个最简单的问题,就是如果你的程序名字是 setup, patch, install 等等,很可能就被 UAC 了。所以名字不要用 setup/patch 等敏感词汇。
UAC 更详细的 walk around,参考:
http://www.codeproject.com/KB/vista-security/VistaElevator.aspx?msg=2951496http://blogs.msdn.com/vistacompatteam/archive/2006/09/25/771232.aspx终极解决方案,请参考:
http://www.codeproject.com/KB/vista-security/UAC__The_Definitive_Guide.aspx
评论