假设你有一个应用程序,想要为用户提供浏览system32目录并在其中执行程序(如telnet)的能力。
当你需要支持XP及以上版本的客户端和2k及以上版本的服务器时,最好的支持方法是什么?
写完所有内容后,我在想是否提供浏览器来实现这一点会花费太多时间/精力,他们可以从资源管理器中复制它。但仍需要启动的能力。
我在Nynaeve上找到了一些讨论。
到目前为止,似乎有以下几个选项:
- 在Windows中创建一个sysnative文件夹,它将允许您浏览/执行64位。问题是:
- 仅适用于Vista / Longhorn,因此不支持XP 64
- 会导致不同的路径命名,不能在多个版本上使用相同的路径。
- 将在整个Windows上激活,而不仅仅是我们的应用程序
- 在安装应用程序时可能不(很可能不)合适
- 如果存在32位和64位版本,则仅允许通过路径显式指定要启动的应用程序版本
- 使用Windows API在显示文件列表或执行用户运行命令时暂时禁用重定向。问题是:
- 仅适用于64位-必须使用GetProcAddress进行操作
- 仅在某些服务包下可用
- 必须单独识别所有应实现此功能的位置
- 用户需要提供有关此是否为64位应用程序或32位应用程序的单独信息。
如果有人有一些示例代码,可以显示一个Windows OpenFile对话框(例如使用MFC CFileDialog),并在XP / Vista上本地显示,并允许查看64位system32目录,那就太棒了。
如果有人有启动所命名应用程序的示例,那就太好了!编辑:
目前我们使用CreateProcess来启动该应用程序(但失败了)。
err = CreateProcess((wchar_t*)exeName.c_str(), (wchar_t*)cmdLine.c_str(), NULL, NULL, FALSE, CREATE_SEPARATE_WOW_VDM, NULL, workingDir.c_str(), &startupInfo, &processInfo);