我在C#和Windows Forms中编写了一个屏幕保护程序。为了测试,我一直懒惰,只使用配置文件进行所有设置(还没有设置对话框),但是当Windows运行屏幕保护程序时程序似乎无法找到或读取配置文件。
当我使用预览按钮或以任何方式手动运行它时它会起作用,只有当它达到屏幕保护程序超时时它才能找到配置文件。
让它记录AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
它返回短名称:C:\Windows\System32\MYSCRE~1.config
应该在哪里C:\Windows\System32\MyScreenSaverName.scr.Config
所以我猜测问题是它无法找到带有短名称路径的配置文件。
不确定是否由于Windows 7运行屏幕保护程序的系统帐户,或者其他方式如何运行。任何信息都会有所帮助,谢谢。
编辑:尝试找出任何差异:
Environment.CommandLine
返回C:\Windows\system32\MYSCRE~1.SCR /s
,但是当我运行屏幕保护程序时它具有正常路径Process.GetCurrentProcess().StartInfo
下的所有内容都相同WindowsIdentity.GetCurrent().Name
是我的帐户名称看看其他问题,似乎User32是启动屏幕保护程序的,所以我认为它必须是如何启动scr进程。
解决方法:将.scr文件重命名为8个字符或更少,使其正常工作。所以现在有用,仍然想知道为什么会存在这个问题。
答案 0 :(得分:1)
编辑:哎哟......我注意到这已经太晚了,这是一个1岁的问题....好吧也许有人可以找到这个有用的。
你确定文件系统不是fat / fat32而不是ntfs吗?
也许这是从旧的fat / fat32格式系统升级的Win7? (所以fs没有升级)?
也许我错了,只是我想看到短名称。我最近在c#中进行了一个屏幕保护程序项目,我没有遇到任何问题......从很久以后我就没有看到短名称......
您应该从磁盘管理中看到fs类型。 做一些研究我也得到了这个,检查FUTIL.EXE是否可以提供帮助,那里有一个好奇的“disable8dot3”选项: