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

时间:2015-07-16 08:22:07

标签: c#

我的应用程序从系统开始,我通过以下方式完成:

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);
            }
   }

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

1 个答案:

答案 0 :(得分:1)

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

  

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

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

也许尝试不同的系统文件夹可以解决它。