我会暴露我的问题,但首先我必须向您展示我的配置,以便为您提供所有详细信息。
我有2个虚拟机,2个窗口7.第一个,它是我开发所有Action Scripts的地方,其中有我的开发环境(IDE),第二个没有特别安装。两者都有Adobe AIR和Adobe Flash Player。
好的,这是我的问题。我开发(在第一个)一个脚本,该脚本使用NativeProcess来运行在命令行中加载dll的CMD.exe。 当我构建和运行项目时一切正常,我检查并加载了DLL。但问题是当第二个Windows连接到我的localhost网站(作为服务器的第一个窗口)并运行不加载我的dll的文件“myProgram.swf”(ActionScript程序)时。
现在我打印出所有代码:
这是加载dll“myProgram.swf”的脚本:
public class NativeProcessExample extends Sprite
{
public var process:NativeProcess;
public function NativeProcessExample()
{
if(NativeProcess.isSupported)
{
setupAndLaunch();
}
else
{
trace("NativeProcess not supported.");
}
}
public function setupAndLaunch():void
{
var fmt:TextFormat = new TextFormat();
var txt:TextField = new TextField();
fmt.size = 32;
txt.text = 'Hello, world!' + '\n' +
'Width = ' + stage.fullScreenWidth + '\n' +
'Height = ' + stage.fullScreenHeight;
txt.setTextFormat(fmt);
txt.autoSize = TextFieldAutoSize.LEFT;
addChild(txt);
var nativeProcessStartupInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();
var file:File = File.applicationDirectory.resolvePath("C:\\Windows\\System32\\regsvr32.exe");
nativeProcessStartupInfo.executable = file;
var args:Vector.<String> = new Vector.<String>();
args.push("C:\\Users\\myUser\\Downloads\\myDLL.dll");
nativeProcessStartupInfo.arguments = args;
var process:NativeProcess = new NativeProcess();
process.start(nativeProcessStartupInfo);
process.addEventListener(NativeProcessExitEvent.EXIT, exitHandler);
我剪切(我删除了所有包含和结尾部分)脚本导致它太长但是这里是最有趣的部分。
现在我将向您展示我的“index.php”,其中第二个Windows连接以恢复并注入dll。 :
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<style type=\"text/css\">
body, html
{
width:100%;
height:100%;
overflow:hidden;
}
#SWFSquare
{
height: 200px;
width: 200px;
background-color: blue;
}
</style>
<script type="text/javascript" src="swfobject.js"></script>
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
</head>
<body bgcolor="#ffdfaf">
<div id="SWFSquare">
</div>
<input type="button" value="Download" id="buttonDownload" style="margin-left: auto; margin-right: auto; display: block;">
<script type="text/javascript">
$(function() {
$("#buttonDownload").click(function() {
window.open("myDLL.dll");
myFunction();
});
function myFunction() {
setTimeout(function(){
var element = document.getElementById("SWFSquare");
swfobject.embedSWF("myProgram.swf", element, 300, 120, 10);
},10000);
}
});
</script>
</body>
</html>
所以我希望你能得到所有需要的信息。不要犹豫,向我询问更多信息。
所以要提醒。当我在我的开发环境(IDE)下的第一个Windows上启动我的脚本时,一切正常我的DLL被加载但是当我尝试通过连接到index.php(=第一个Windows作为服务器)加载它与第二个Windows时,SWF工作原因我在页面上获取消息“HelloWorld”,但未加载DLL ...
你能帮帮我吗?我在这工作了两个星期: - (。答案 0 :(得分:0)
首先,谢谢你们的快速反应: - )
所以,我将回答&#34; Akmozo的问题:
正如您在我的ActionScript描述中所看到的,它将使用&#34; NativeProcess&#34;运行将执行命令以加载myDLL.dll的cmd
所以,我只需要执行swf来启动所有这些。这是AIR app和swf之间的关系。我在FlashDevelop环境和每个脚本&#34; myProgram.as&#34;你&#34;建立&运行&#34;创建一个&#34; myProgram.swf&#34;文件。一旦我得到这个文件(自动创建),我只需要通过我的&#34; index.php&#34;在网上运行它。更准确地说,这段代码:
var element = document.getElementById("SWFSquare");
swfobject.embedSWF("myProgram.swf", element, 300, 120, 10);
所以,当第二个窗口连接到运行myProgram.swf的index.php时,最后我还没有加载...
那是我的问题。我有没有回答你&#34; Akzmozo&#34; ?
现在,对于你的回答&#34; VC.one&#34; 我认为应该可以在我特别准备的环境中做到这一点。 也就是说:
我是一名IT安全研究员(学生),这就是我现在正在努力解决Adobe Flash Player 19漏洞的原因。通常情况下,可以这样做,因为已经有了CVE这项工作,我会(重新)创建这个场景。但我总是坚持这个问题,我想我错过了一些东西,但我不知道它是什么......
答案 1 :(得分:0)
但是我总是坚持这个问题,我想我错过了什么 但我不知道它是什么......
@Akmozo是对的。 Flash Player(浏览器)&amp; AIR(OS应用程序)是两种不同的方式来运行AS3代码作为应用程序。 他们总是不一样(由于安全原因,浏览器Flash Player插件呈现的AS3应用程序更受限制,它无法在计算机上运行程序,否则黑客和病毒创建者会有用这种力量找到了天堂,通过互联网传播混乱)。
还要考虑如果从Mac或Linux浏览器运行SWF会发生什么?这些操作系统如何加载dll(因为它是一个仅限Windows的文件)?这打破了浏览器中的代码在任何地方都可以工作的规则,无论平台如何。
只是为了证明一点......更新你的文本域代码如下所示。在IDE测试中,它应该说(NP) Support = true
,但在浏览器中,您将获得= false
。当然,如果它是假的,那么你就无法从浏览器加载dll。
var fmt:TextFormat = new TextFormat();
var txt:TextField = new TextField();
fmt.size = 32;
txt.text = 'Hello, world!' + '\n' +
'Width = ' + stage.fullScreenWidth + '\n' +
'Height = ' + stage.fullScreenHeight + '\n' +
'(NP) Support = ' + String(NativeProcess.isSupported); //# check if available
txt.setTextFormat(fmt);
txt.autoSize = TextFieldAutoSize.LEFT;
addChild(txt);