Start aplikacji z systemem i ładowanie pliku

0

Moja aplikacja startuje razem z systemem Windows, robię to za pomocą kodu:

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

Następnie chcę załadować plik który znajduje się pod ścieżką:

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

Problem polega na tym że zmienna configPath przy starcie aplikacji jest pusta, jeżeli wyłącze aplikacje i włączę ją ręcznie, ścieżka się pojawia nie wiem czemu to nie działa gdy aplikacja startuje automatycznie.

Cały kod

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"; 

                    Console.WriteLine("Path: " + configPath);   //is empty
                    statusLabel.Content = configPath;
                    InitializeComponent();

                     int inter = settings.interval; // is empty

     }catch(Exception e)
            {
                System.Windows.Forms.MessageBox.Show(e.Message);
            }
   }
0

Problem pewnie leży w tym, że system po uruchomieniu z rejestru pracuje na innej ścieżce początkowej. Zapisz sobie ścieżkę gdzieś do pliku:

 System.IO.File.WriteAllLines(@"TwojPlikTXT.txt", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString()) 

I zobacz jakie da rezultaty.

0

Problem udało się rozwiązać. Okazało się że try zwraca błąd o braku pliku (później mam w kodzie linie odpowiadającą za ustawienie ikony w trayu)

        
        m_notifyIcon.Icon = new System.Drawing.Icon(BaseDir + "\\ico.ico");

Ustawiłem pełną ścieżkę i jest ok, działa.

0

Hmm pierwsza myśl to, że aplikacja uruchamia się pod kontem systemowym...
EDIT:
Jaki system?

1 użytkowników online, w tym zalogowanych: 0, gości: 1