我的问题的总结版本:
我在 .NET 中创建了一个应用程序,它将一些文件提取到“%TEMP%\Virtuosa Loader\”,当文件被提取时,应用程序启动一个 64 位进程(mame64.exe,位于提取的文件夹中)。
这是应用程序:http: //ElektroStudios.tk/Compiled.exe
应用程序和从应用程序启动的 64 位进程完美运行,但如果我使用BoxedAppPacker打包应用程序,则不会启动 64 位进程(mame64.exe)。
这是使用BoxedAppPacker打包的应用程序:http : //ElektroStudios.tk/Packed.exe
我使用默认的BoxedAppPacker选项和“虚拟化文件系统和注册表的所有更改”选项,因为我想以所有方式隐藏临时目录中的文件。
我试图在BoxedappPacker中添加/创建一个空的“ SysWow64 ”文件夹和“ system32 ”文件夹,我不知道这是否愚蠢,但我不知道我还能尝试什么。
问题:请问我该如何解决这个问题?为什么会这样?
谢谢你的阅读。
我的问题的扩展版本:
我有一个针对 Framework 3.0 版本并针对“AnyCPU”机器的VisualStudio 2012 项目,我正在使用 Windows 7 x64。
我的应用程序基本上首先使用SevenZipSharp库将压缩文件提取到“%TEMP%”文件夹,当提取其中的文件时,我使用“process.start”在未压缩文件夹中启动 procces。
我写了一个使用sevenzipsharp的方法,如下所示:
SevenZipSharp_Extract(System.IO.Path.GetTempPath() & "\Virtuosa Loader.tmp", System.IO.Path.GetTempPath() & "\Virtuosa Loader\")
该行表示文件“%TEMP%\Virtuosa Loader.tmp”(Wich 是一个 .7z 文件,文件扩展名更改为 .tmp)的内容被提取到“%TEMP%\Virtuosa Loader\”文件夹。
然后我更改当前工作目录并运行如下进程:
IO.Directory.SetCurrentDirectory(System.IO.Path.GetTempPath() & "\Virtuosa Loader")
Process.Start("Mame64.exe", "Rom.zip")
最后,我使用BoxedAppPacker应用程序打包我编译的项目,以虚拟化系统上的所有文件更改。
问题是在使用BoxedAppPacker之后,当我将在提取后从我编译的项目中启动的应用程序是 x64 可执行文件时,它不会启动(任何 Windows 错误,只是不会启动但进程存在,因为如果我让一个简单的条件来检查文件是否存在它返回True),
我不知道我是否做错了什么,但如果不是像“mame64.exe”这样的64位可执行文件,我尝试从我编译和打包的应用程序中启动像“mame.exe”这样的32位可执行文件,那么一切都可以作为预期的。
我试图将项目设置的编译选项卡中的目标机器更改为 x64 和 x86,并使用BoxedappPacker将其打包,如果我在编译选项卡中选择“x64”并使用BoxedAppPacker打包我编译的应用程序然后编译应用程序直接不会运行(任何 Windows 错误,只是不会运行)...如果我选择“anycpu”或“x86”打包的应用程序运行,但我将从我的项目启动的 x64 进程不会运行.
我激活的BoxedAppPacker选项是默认选项,此选项:“虚拟化文件系统和注册表的所有更改”
...因为我想虚拟化系统中的所有文件更改,以免用户看到 %TEMP% 文件夹中提取的文件,正如我所说,如果我打包应用程序并且打包的应用程序启动 x86 可执行文件,这将非常有效,但不适用于 x64 可执行文件。
我认为这个问题至少在没有用我的项目测试BoxedappPacker虚拟器的情况下很难解决,所以这里是文件:
这是完整的 VS2012 项目文件:http: //ElektroStudios.tk/Virtuosa_Loader_Project.zip
这是编译后的应用程序:http: //ElektroStudios.tk/Compiled.exe
这是使用BoxedAppPacker打包的应用程序:http : //ElektroStudios.tk/Packed.exe
这里是BoxedAppPacker试用版: http: //www.boxedapp.com/boxedapppacker/download.html(我使用的是 3.2.3.0 版本)