阻止来自 运行 的应用程序位于错误的文件夹中
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);
我有一个(相当大的)应用程序,它依赖于与应用程序位于同一文件夹中的一些资源(例如设置文件、非托管库等)。
我还为此应用程序注册了一个 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);
}
好的 -
Directory.SetCurrentDirectory(@"c:\path\to\app");
"resets"工作目录到所需路径。在我的具体情况下,我使用了:
FileInfo nfo = new FileInfo(Assembly.GetExecutingAssembly().Location);
Directory.SetCurrentDirectory(nfo.Directory.FullName);