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