启动应用程序与系统和加载文件

本文关键字:加载 文件 系统 应用程序 启动 | 更新日期: 2023-09-27 18:02:54

我的应用程序从系统开始,我通过:

RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE''Microsoft''Windows''CurrentVersion''Run", true);
rkApp.SetValue("Monitor", BaseDir+"''Monitor.exe");

然后我想加载一个位于路径下的文件:

string configPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "''settings.jsn"; 

问题是变量configPath在启动时是空的,如果我关闭应用程序并手动,路径似乎不知道为什么当应用程序自动启动时它不工作。

更新:这是我的类

    public partial class MainWindow : Window
        {
     class MySettings : AppSettings<MySettings>
            {
                public string filePath = null;
                public string interval = "0";
            }
            public class AppSettings<T> where T : new()
            {
                private static readonly string DEFAULT_FILENAME = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "''settings.jsn";

                public void Save(string fileName = null)
                {
                    File.WriteAllText(DEFAULT_FILENAME, (new JavaScriptSerializer()).Serialize(this));
                }
                public static void Save(T pSettings, string fileName = null)
                {
                    File.WriteAllText(DEFAULT_FILENAME, (new JavaScriptSerializer()).Serialize(pSettings));
                }
                public static T Load(string fileName = null)
                {
                    T t = new T();
                    if (File.Exists(DEFAULT_FILENAME))
                        t = (new JavaScriptSerializer()).Deserialize<T>(File.ReadAllText(DEFAULT_FILENAME));
                    return t;
                }
            }
            MySettings settings = MySettings.Load();
            public MainWindow()
            {
                try
                {
                    RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE''Microsoft''Windows''CurrentVersion''Run", true);
                    rkApp.SetValue("Monitor", BaseDir+"''Monitor.exe");
                    string configPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "''settings.jsn";
                    string configPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "''settings.jsn"
                    statusLabel.Content = configPath;
                    Console.WriteLine("Path: " + configPath);   //is empty
    InitializeComponent();
                     int inter = settings.interval; // is empty
     }catch(Exception e)
            {
                System.Windows.Forms.MessageBox.Show(e.Message);
            }
   }

这是我读取设置的代码。如果每次系统未加载时自动启动,则在手动启动程序时读取设置,并且文件所在路径为空。

启动应用程序与系统和加载文件

我找到了这个页面:https://msdn.microsoft.com/en-us/library/system.environment.specialfolder(v=vs.110).aspx

表示

ApplicationData:作为公共存储库的目录当前漫游用户的应用程序特定数据。漫游用户在网络上的多台计算机上工作。漫游用户的个人资料保存在网络上的服务器上,并在时加载到系统用户登录

我的猜测是,当你的应用程序在系统启动时启动时,没有用户登录,它不能得到这个文件夹。这也解释了为什么你不能重现这个问题,因为你已经登录了。

也许换个系统文件夹就可以了