前一段时间碰到一个问题 ,就是想通过.NET服务器端程序对服务器某一应用程序进行截屏。截屏的功能不难,网上也有很多源码。这当然要牵扯到调用API。一般来讲,.NET调用API是可以的,但问题就出现在,当.NET程序运行在调式状态时,正常截屏是可以的,但普通运行状态,发现截屏都是全黑的。
开始就怀疑是权限问题,我想到了服务程序里有个概念是“与桌面交互”,所以试图对IIS服务加上“与桌面交互”选项,以使得其具有截屏权限。这个尝试未能解决问题。
后来又想到IIS进行是以ASPNET帐户运行的,也许是ASPNET帐户权限不够,所以就想试图让IIS进行以其他具有高权限的帐户登录。发现这样会导致IIS服务无法启动。
接下来还尝试过让.NET调用COM DLL,COM EXE(考虑到EXE运行在不同进行,应该有不同的权限),甚至是COM SERVICE,结果都和以前一样,调试时可以,运行时不行。
经过仔细分析,发现调试时,WEB SERVER的登录帐户是管理员,而运行时其登录帐户是ASPNET,这更让我们确信是权限问题。
经过多方查找,最终从网上得知,.NET调用普通的API还有DLL是可以的,但对与屏幕操作有限制。如何解决呢?
最终想到了.NET的配置文件,令人失望的是,改了配置文件,让其以管理员权限执行还是不行。功夫不负有心人,最终查到了IIS 5.1会忽略一些配置文件中的字段。升级到6.0以上就可以解决?可我们目前的测试及其是XP,好像不能装6.0呀?抱着试试看的态度,插入Windows Server 2003安装盘,重新安装ISS,好像一切顺利。
修改machine.config文件:
<
processModel
autoConfig
="true"
userName
="System"
password
="AutoGenerate"
/>
将IIS登录用户改为System,程序运行一切正常。问题解决。
这里写出来,希望对遇到类似问题的人有所帮助。