Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.Net屏幕保护程序找不到配置文件_.net_Windows 7_Screensaver - Fatal编程技术网

.Net屏幕保护程序找不到配置文件

.Net屏幕保护程序找不到配置文件,.net,windows-7,screensaver,.net,Windows 7,Screensaver,我已经用C#和Windows窗体编写了一个屏幕保护程序。为了进行测试,我一直很懒,只是对我的所有设置使用了配置文件(还没有设置对话框),但是当windows运行屏幕保护程序时,程序似乎无法找到或读取配置文件 当我使用预览按钮或以任何方式手动运行它时,它都能工作,只有当它点击屏幕保护程序超时时,它才能找到配置文件 让它记录AppDomain.CurrentDomain.SetupInformation.ConfigurationFile它返回短名称:C:\Windows\System32\MYSC

我已经用C#和Windows窗体编写了一个屏幕保护程序。为了进行测试,我一直很懒,只是对我的所有设置使用了配置文件(还没有设置对话框),但是当windows运行屏幕保护程序时,程序似乎无法找到或读取配置文件

当我使用预览按钮或以任何方式手动运行它时,它都能工作,只有当它点击屏幕保护程序超时时,它才能找到配置文件

让它记录
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
它返回短名称:
C:\Windows\System32\MYSCRE~1.config
它应该在哪里
C:\Windows\System32\MyScreenSaverName.scr.Config

所以我猜问题是它找不到具有短名称路径的配置文件

不确定这是由于Windows 7运行屏幕保护程序的系统帐户,还是与它如何运行有关的其他原因。任何信息都会有帮助,谢谢

编辑:尝试查找任何差异:

  • 我能找到的唯一区别是,当Windows运行屏幕保护程序时,
    Environment.CommandLine
    返回
    C:\Windows\system32\MYSCRE~1.SCR/s
    ,但在运行屏幕保护程序时返回的路径是正常的
  • Process.GetCurrentProcess().StartInfo
    下的所有内容都是相同的
  • WindowsIdentity.GetCurrent().Name
    是我的帐户名
  • 看看其他的问题,似乎User32是启动屏幕保护程序的原因,所以我想它应该是关于如何启动scr过程的


    解决方法:将my.scr文件重命名为8个字符或更少可以使其正常工作。因此,现在这样做有效,我仍然想知道为什么会存在这个问题。

    编辑::哎哟。。。我注意到这是一个有一年历史的问题,太晚了。。。。也许有人会觉得这很有用


    您确定文件系统不是fat/fat32而不是ntfs吗

    可能是从旧的fat/fat32格式系统升级的Win7?(因此fs没有升级)

    也许我错了,这只是我的猜测,看到短名称的地方。我最近在c#上做了一个屏幕保护程序项目,没有遇到任何问题。。。老实说,从古到今我都没见过短名字

    您应该可以从磁盘管理中看到fs类型。 做了一些研究,我也得到了这个,检查FUTIL.EXE是否可以帮助,那里有一个奇怪的“disable8dot3”选项:


    我也遇到了同样的问题。但是这种变通方法对我也适用……因为运行屏幕保护程序的代码仍然有DOS/旧Windows的8个字符的限制?与C:\Progra~\类似,如果您调用AppDomain并将配置文件更改为“a.config”,则可能在不将文件重命名为小于8个符号的情况下,该配置文件也可以工作。比如:AppDomain.CurrentDomain.SetData(“APP_CONFIG_FILE”,“c:\\this_is_a_long_CONFIG_FILE.CONFIG”);注:这是一个猜测,这就是为什么我添加它作为一个评论,而不是一个答案。