我的问题的摘要版本:
我在.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 ”文件夹,我不知道知道这是不是很愚蠢,但我不知道我还能尝试什么。
问题:请问如何解决问题?为什么会这样?
谢谢你的阅读。
我的问题的扩展版本:
我有一个 VisualStudio 2012项目,目标是Framework 3.0版本,目标是“AnyCPU”机器,我正在使用Windows 7 x64。
我的应用程序基本上首先使用 SevenZipSharp 库将压缩文件解压缩到“%TEMP%”文件夹,当提取内部文件时,我使用“process.start”启动在未压缩的文件夹中进行操作。
我写了一个使用sevenzipsharp的方法,如下所示:
SevenZipSharp_Extract(System.IO.Path.GetTempPath() & "\Virtuosa Loader.tmp", System.IO.Path.GetTempPath() & "\Virtuosa Loader\")
该行表示文件“%TEMP%\ Virtuosa Loader.tmp”(文件扩展名更改为.tmp的.7z文件)的内容被提取到“%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位可执行文件我尝试从编译和打包的应用程序启动32位可执行文件,如“mame.exe”一切都按预期进行。
我尝试将项目设置的编译选项卡中的定位机器更改为x64和x86,并使用 BoxedappPacker 打包,如果我在编译选项卡中选择“x64”并且我使用 BoxedAppPacker 打包我编译的应用程序然后直接编译的应用程序将无法运行(任何Windows错误,只是不会运行)...如果我选择“anycpu”或“x86”打包的应用程序运行,但iI将从我的项目启动的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版本)