阻止来自 运行 的应用程序位于错误的文件夹中

Prevent Application from running inside the wrong folder

我有一个(相当大的)应用程序,它依赖于与应用程序位于同一文件夹中的一些资源(例如设置文件、非托管库等)。
我还为此应用程序注册了一个 URI 协议,因此每个以 xyz://... 开头的 URI 调用都将使用相应的参数启动我的应用程序。

问题是,如果您使用 URI 调用,应用程序将从 %windir%/system32-文件夹或 ../ProgramFiles/Chrome/...-文件夹(当 URI 是从我的网络浏览器调用)。它不会 运行 我的应用程序来自它所在的文件夹。

(你可能已经看到我的问题了...)

如果我的应用 运行 来自 sys32 文件夹,它将(自然地)无法访问本地库,而我的某些 P/Invoke 功能需要它。


我的问题是:如何从正确的文件夹中 运行 我的应用程序或防止它从像 sys32 这样的文件夹中 运行?


不 - 我不喜欢以下想法:

if (Directory.GetCurrentDirectory().ToLower() != "/my/home/dir") {
    MessageBox.Show("You have no power over here!");

    Exit(1);
}

好的 - written by @MutantNinjaCodeMonkey 最终帮助了我:

Directory.SetCurrentDirectory(@"c:\path\to\app");

"resets"工作目录到所需路径。在我的具体情况下,我使用了:

FileInfo nfo = new FileInfo(Assembly.GetExecutingAssembly().Location);

Directory.SetCurrentDirectory(nfo.Directory.FullName);