vb.net 应用程序在由其他程序启动时无法访问 my.settings

vb.net application cannot access my.settings when started by another program

提问人:Oliver 提问时间:11/7/2023 最后编辑:Oliver 更新时间:11/8/2023 访问量:46

问:

我编写了一个应用程序,它将一些设置存储在 My.Settings 中,以便在 e.Args 具有某些特定数据时在 Application_StartUp 事件中使用。

我的问题是该软件在由其他软件启动时应该自动运行,但是如果这样启动,它似乎无法访问My.Settings。

我猜这是一些 Windows 安全警察......

有谁知道我该如何解决这个问题?

PS:我已经尝试将信息保存在XML文件中,并在启动时加载它。但这似乎也没有奏效......

@nbk 没有太多可展示的:

Private Sub Application_Startup(sender As Object, e As StartupEventArgs) Handles Me.Startup
    Dim Folder As String = My.Settings.BaseDirectory & "\Results\"
    
    If (My.Settings.SubDirectory.Length > 0) Then
        Folder &= My.Settings.SubDirectory & "\"
    End If
End Sub

如果我只是运行我的应用程序,文件夹看起来像“C:\BaseFolder\Results\SubFolder”,但如果我尝试通过另一个软件(我没有编写)运行它,它看起来像“\Results”


我写了这个控制台应用程序:

Sub Main()
    Try
        Dim args = My.Application.CommandLineArgs
        If args.Count = 0 Then Throw New Exception("No Result given")

        Dim executable As String = "C:\Path\Executable.exe"
        If Not File.Exists(executable) Then Throw New Exception("Executable not found")

        Dim path = IO.Path.GetDirectoryName(executable)
        If Not Directory.Exists(path) Then Throw New Exception("Working directory not found")

        Dim result As String = String.Join(" ", args)

        Dim info As New ProcessStartInfo(executable, Chr(34) & result & Chr(34)) With {
            .UseShellExecute = True,
            .WorkingDirectory = path
        }
        Dim p = Process.Start(info)
        p.WaitForExit()
    Catch ex As Exception
        Console.WriteLine(ex.Message)
    End Try
End Sub

如果我单独运行它,它可以工作,但是如果我尝试通过第三方软件运行它,它不起作用......

Windows vb.net 安全 my.settings

评论

0赞 nbk 11/7/2023
你能添加一些你尝试过的代码吗
0赞 jmcilhinney 11/7/2023
这是应用程序范围的设置还是用户范围的设置?您如何从其他应用程序启动它?您是否正在设置工作目录?
0赞 Oliver 11/7/2023
这是一个用户范围的设置,我在应用程序中启动它,该应用程序具有在处理数据后运行外部软件的选项。为了选择要运行的软件,请选择可执行文件并定义参数。所以我无法判断软件是否为我设置了工作目录。
0赞 Craig 11/7/2023
与您的问题无关的小代码审查评论:我建议使用而不是字符串连接来编写文件夹路径。System.IO.Path.Combine
1赞 jmcilhinney 11/8/2023
如果您创建自己的新应用程序来运行现有应用程序,是否会发生同样的事情?

答: 暂无答案