5

レジストリキーを使用して、アプリケーションをWindowsスタートアップにロードするように設定しています(ユーザーログイン後)。私のコード:

RegistryKey RegKey = Registry.LocalMachine;
RegKey = RegKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
RegKey.SetValue("AppName", "\"" + @"C:\Users\Name\Desktop" + "\"");
RegKey.Close();

したがって、このコードでは、起動時にアプリケーションがロードされますが、作業ディレクトリは

C:\ Windows \ System32

誰かが理由を知っていますか?

そのプログラムを動作させるには、同じディレクトリ内にいくつかのファイルが必要なため、これは私には機能しません。プログラムが選択したディレクトリ( "C:\ Users \ Name \ Desktop")にロードされている場合、問題は発生しません。

誰かがこれについて何か提案がありますか?

4

2 に答える 2

6

Directory.SetCurrentDirectory()アプリの起動時に作業ディレクトリを設定するために使用できます。EXEパスは、を使用して取得できますApplication.ExecutablePath

それらをまとめます:

var fi = new FileInfo(Application.ExecutablePath);
Directory.SetCurrentDirectory(fi.DirectoryName);
于 2012-11-05T04:22:25.463 に答える
0

私はこれを達成する方法についての安っぽいトリックを見つけました。アプリケーションが起動したら、レジストリをもう一度読んで、アプリケーションの起動パス(目的のパス)を取得します。例:Appl1の起動パスは「C:\ Users \ Name \ Desktop\App1.exe」です。

そのパスのレジストリを読み取ったら、それを現在のディレクトリとして設定します。このようなもの:

        RegistryKey RegKey = Registry.LocalMachine;
        RegKey = RegKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", false);
        string Path = RegKey.GetValue("App1.exe").ToString();
        Path = Path.Replace(@"\App1.exe"", ""); // Now it's a valid directory.
        Directory.SetCurrentDirectory(Path);

これは私にとってはうまくいきましたが、誰かがより良い方法を持っているなら、私はそれらを聞いてみたいです。

于 2012-11-05T04:51:52.767 に答える