Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.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
Vb.net 默认值用于My.Settings,而不是app.config中的值(对于Windows服务)_Vb.net_Windows Services_Application Settings - Fatal编程技术网

Vb.net 默认值用于My.Settings,而不是app.config中的值(对于Windows服务)

Vb.net 默认值用于My.Settings,而不是app.config中的值(对于Windows服务),vb.net,windows-services,application-settings,Vb.net,Windows Services,Application Settings,为了简单起见,在VB.NET中编写的Windows服务正在使用My.Settings命名空间。只有三个设置需要读取,这些设置在ServiceLauncher的构造函数中读取 我正在尝试安装以下服务: installutil GID.ServiceLauncher.exe 这是成功的,但是它使用的配置设置不是GID.ServiceLauncher.exe.config文件中的设置,而是使用烘焙到应用程序中的设置作为settings.Designer.vb(标记为DefaultSettingVal

为了简单起见,在VB.NET中编写的Windows服务正在使用My.Settings命名空间。只有三个设置需要读取,这些设置在ServiceLauncher的构造函数中读取

我正在尝试安装以下服务:

installutil GID.ServiceLauncher.exe
这是成功的,但是它使用的配置设置不是GID.ServiceLauncher.exe.config文件中的设置,而是使用烘焙到应用程序中的设置作为settings.Designer.vb(标记为DefaultSettingValueAttribute)中的默认设置。[微软不允许开发人员忽略默认设置的智慧值得怀疑,这完全是另一个问题]

如何进一步诊断此问题,并强制重新加载设置?我尝试调用My.Settings.Default.Reload,但没有任何效果。所有设置都是应用程序设置,仅与自动生成的文件中的设置“值”不同

我已经使用System.Diagnostics.debugger.Launch()成功地附加了调试器,如果足够正确,设置仍然是默认设置


考虑到这个问题,背景:需要配置设置的原因是因为这是一个非常简单的服务,只需执行一个exe;这个exe在可配置的位置。还有其他原因,例如我希望在不重新编译的情况下配置服务名称。

当您访问设置时,是否编写
My.settings.Default.MySetting
?如果是,请尝试将其更改为
My.Settings.MySetting

是否手动更改了app.config文件中的设置。如果是,这些更改只有在
应用程序
设置-而不是
用户
设置时才会被拾取

因此,简单的解决方法是将设置范围更改为
应用程序

更新
检查您的文件访问权限。运行服务的帐户是否具有访问配置文件的权限?请参见

我发现,由于安装程序与InstallUtil.exe在同一进程中运行,因此从未找到Windows服务的配置文件。 类似条款

因此,我推出了自己的简单解决方案。有关新代码,请参见下文:

Friend Function GetConfigurationValue(ByVal key As String) As String
    Dim service = System.Reflection.Assembly.GetAssembly(GetType(ProjectInstaller))
    Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(service.Location)
    Dim keyValue As String = config.AppSettings.Settings(key).Value

    If String.IsNullOrEmpty(keyValue) Then
        Throw New IndexOutOfRangeException(String.Format("Settings collection does not contain the requested key:[{0}]", key))
    End If

    Return keyValue
End Function
替代解决方案:



谢谢Geoff的建议,但所有设置都是应用程序设置Hanks Geoff,非常符合逻辑的建议。遗憾的是,即使在“我的登录名”(即创建文件、服务的登录名,以及服务运行和安装的帐户)下也会出现此问题。@Topdown-配置文件是否与可执行文件位于同一文件夹中(请参阅“Windows服务属性”对话框中的“可执行文件路径”),或者尝试将其复制到Windows.System32文件夹中。进行任何更改后,请不要忘记重新启动服务。感谢您的建议ho1,我已经按照您的建议访问了设置。请注意,我非常熟悉My.Settings命名空间,在非服务应用程序中使用过多次。但在这种情况下,它似乎不起作用。只要可行,我现在唯一能想到的就是通过SysInternals尝试ProcMon来查看正在加载哪些文件。欢迎提出任何其他建议!另一种解决方案可能是让您的服务自行安装(例如,可以使用-i来安装它们,使用-u来卸载它们),这样您就不必担心它是另一个进程。