我用 C# 编写了一个屏幕保护程序,但是每当我在预览模式下运行它或让它启动时,它都会引发异常。当我在 Windows\System32 中双击它时,它运行良好。使用 Visual Studio 调试器,我发现它不会读取应用程序的 .config 文件,该文件也在 Windows\System32 中。
我认为当 rundll32.exe 执行屏幕保护程序时,app.config 文件被省略了。有没有办法强制它加载?
谢谢
我用 C# 编写了一个屏幕保护程序,但是每当我在预览模式下运行它或让它启动时,它都会引发异常。当我在 Windows\System32 中双击它时,它运行良好。使用 Visual Studio 调试器,我发现它不会读取应用程序的 .config 文件,该文件也在 Windows\System32 中。
我认为当 rundll32.exe 执行屏幕保护程序时,app.config 文件被省略了。有没有办法强制它加载?
谢谢
感谢那些推荐 SysInternals 的 Process Monitor 的人。使用它,我看到它正在寻找配置文件名的 8 个字母版本。它是 SCR 文件的前六个字母,然后是 ~1.scr,因为那是进程的名称。我所要做的就是重命名文件,或者保留它的 2 个版本,因为我不想更改 scr 文件的名称。
据我之前的经验,屏幕保护程序在其“当前目录”设置为 %userprofile% 的情况下运行。您可以通过临时将配置文件放入该目录来检查它是否正确。如果它碰巧是真的,那么你必须添加代码来从你的屏幕保护程序所在的目录读取你的配置,而不是从它的当前目录。
使用进程监视器查看屏幕保护程序试图读取的配置文件。
如果到目前为止没有任何提示有效,您也可以
我的猜测是您的应用程序使用不同的工作目录运行。从这篇文章(向下阅读)看来,您需要创建正常的可执行文件,重命名为 *.scr,右键单击该文件并选择“安装”,这会将两者都移动到 system32 目录。
也许“安装”功能会改变调用屏幕保护程序的方式,或者它应该在哪里寻找工作目录。