JayGatsby
JayGatsby

Reputation: 1621

Adding Program to Windows Startup

My program saves user's input to a txt file on it's current location

TextWriter ts = new StreamWriter("url.txt");
ts.WriteLine(textBox2.Text.ToString());
ts.Close();

It reads that when application starts

if (File.Exists("url.txt")) {
    TextReader tr = new StreamReader("url.txt");
    readUrl = tr.ReadLine().ToString();
    textBox2.Text = readUrl;

    tr.Close();
}

I add this program to Windows startup with these code

using (RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true)) {
    key.SetValue("House Party Protocol", "\"" + Application.ExecutablePath + "\"");
}  

I published it with ClickOnce and installed it to my computer. It starts at windows startup bu doesn't read txt file. When I open it manually it works. I think ClickOnce installation path and windows startup path are different. How should I change my startup code to avoid this

Upvotes: 0

Views: 152

Answers (1)

ama1111
ama1111

Reputation: 579

You could try to use a specific directory. For example, you could save the url.txt file to LocalApplicationData (the directory for application-specific data that is used by the current, non-roaming user).

    static void Main(string[] args)
    {
        string inputText = string.Empty;

        //string directory = Environment.CurrentDirectory;
        string directory = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        string path = Path.Combine(directory, "url.txt");

        if (File.Exists(path))
        {
            TextReader tr = new StreamReader(path);
            string readUrl = tr.ReadLine().ToString();
            inputText = readUrl;

            tr.Close();
        }

        string text = "abc";
        TextWriter ts = new StreamWriter(path);
        ts.WriteLine(text);
        ts.Close();
    }

If you really want to use the directory where the application is running then you could try to use Environment.CurrentDirectory (commented-out in the sample code above). This might give you the same error you had before (when using relative path) but it might help you troubleshoot the issue by showing what directory it's trying to use.

Here's a list of other special folders: Environment.SpecialFolder

Upvotes: 1

Related Questions