我有一个32位应用程序,我想注册打开" explorer.exe"作为一项跳跃任务。它在32位Windows 7上工作正常,但在64位Windows中,它会出现错误" C:\ Windows \ system32 \ explorer.exe未指定错误"。
由于Explorer的完整路径是" C:\ Windows \ SysWOW64 \ explorer.exe",我认为这是Windows在运行时看到32位模拟路径的结果,但是跳转列表需要完整的64位路径。有没有一种简单的方法来构建这个可以在64位操作系统上运行的跳转列表?
我想我可以检查一下Environment.Is64BitOperatingSystem并将位置硬编码到" C:\ Windows \ SysWow64"如果设置了,但我使用硬编码路径是不好的。
string exe = System.Reflection.Assembly.GetExecutingAssembly().Location;
string current = System.IO.Path.GetDirectoryName(exe);
var jl = new System.Windows.Shell.JumpList();
jl.ShowFrequentCategory = false;
jl.ShowRecentCategory = false;
jl.BeginInit();
jl.JumpItems.AddRange(new[]
{
new System.Windows.Shell.JumpTask
{
Title = "Explore",
ApplicationPath = "explorer.exe",
IconResourcePath = "explorer.exe",
Arguments = "/select,\"" + exe,
WorkingDirectory = current,
},
// other jump tasks here
});
jl.EndInit();
jl.Apply();
答案 0 :(得分:0)
我在这里找到了答案How to start a 64-bit process from a 32-bit process
“sysnative”事情在这种情况下不起作用,但禁用文件系统重定向暂时有效:
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
Wow64DisableWow64FsRedirection(ref ptr);
try
{
// Add jump list code
}
finally
{
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
Wow64RevertWow64FsRedirection(ptr);
}