我有一个Delphi 2010 exe,它启动了第二个exe.在第二个exe中,有一个调用openDialog.execute的对话框.当它在远程桌面下的Windows 2008 Enterprise R2下运行时,它会按预期运行,但是当作为远程应用程序运行时,只要弹出文件对话框,应用程序就会挂起,将所有应用程序窗口都变为白色.摆脱它的唯一方法是终止应用程序.我尝试用TFileOpenDialog替换TOpenDialog,结果是一样的.我已经考虑修改启动主应用程序的RDP文件,但是看不到任何会产生影响的参数.以前有没有人见过这种行为?
2010.07.13更新
这可以使用一个简单的例子重现.示例中有两个可执行文件.第一个是文件启动器,名为m_module.exe,它包含一个编辑,一个按钮和下面的代码.在单击启动按钮之前,我在编辑中更改可执行文件的名称以匹配第二个可执行文件:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', stringToOLEstr(edit1.text) , nil, nil, SW_SHOWNORMAL) ;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
edit1.text:=application.exename;
end;
Run Code Online (Sandbox Code Playgroud)
第二个可执行文件包含一个按钮,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.execute;
end;
Run Code Online (Sandbox Code Playgroud)
第一个模块是从RDP文件启动的.
2010.07.14更新
我发现如果我复制以下dll:
thumbcache.dll
dtsh.dll
wkscli.dll
Run Code Online (Sandbox Code Playgroud)
从\ Windows\System32文件夹进入应用程序文件夹,问题就消除了.
我进一步发现将\ Windows\System32文件夹中这些dll的所有权和权限级别从TrustedInstaller更改为管理员组具有相同的结果(将它们复制到应用程序目录正在改变我认为的所有权和权限)
为了确认这一点,我确认如果我将所有权和权限级别更改回远离管理员组的TrustedInstaller,则会再次出现错误.
所以看来这是某种访问问题.也许这有助于发现问题的原因.
2010.07.18更新
一些可能有用的其他信息(由Embarcadero提供):
这篇关于GetWindowsDirectory的MSDN文章http://msdn.microsoft.com/en-us/library/ms724454%28VS.85%29.aspx记录了在终端服务下运行的应用程序的一些有趣行为.虽然没有直接调用GetWindowsDirectory,但每个用户的Windows系统目录的沙盒可能会导致某种问题.也许GetOpenFileNameA的调用链中的一个DLL试图引用真实系统目录中的真实DLL而不是沙盒,从而导致权限违规.这只是猜测,但值得研究.如果您能够在服务器上运行SysInternals Process Monitor或Process Explorer,您应该能够看到commdlg32和堆栈跟踪中的其他DLL被加载.
所有旧应用程序(即,未为终端服务或远程桌面服务创建的所有应用程序)都在应用程序兼容性层下运行.请参阅此MSDN文章http://msdn.microsoft.com/en-us/library/cc834995%28VS.85%29.aspx.IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE标志在Windows.PAS中定义.出于测试目的,您可以将Windows添加到应用程序的PE头部,方法是将Windows添加到应用程序的USES部分,并在USES部分下面添加:
{$ SetPEOptFlags IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
这将导致您的应用程序绕过兼容层.我目前正在调查产生的进程(例如你的第二个exe)是否保留了在RDS下定义的应用程序的所有权限和设置.
我一直在尝试将项目推送到关联数组,如下所示:
$new_input['name'] = array(
'type' => 'text',
'label' => 'First name',
'show' => true,
'required' => true
);
array_push($options['inputs'], $new_input);
Run Code Online (Sandbox Code Playgroud)
但是,而不是'name'作为键添加一个数字.还有另一种方法吗?
我有一台服务器,我可以进入,但就是这样.否则它完全与外界隔绝.我正在尝试部署我写给它的一些脚本,但它们有几个Perl依赖项(Params :: Validate,XML :: Simple等)我无法通过yum获取它们,因为我们的卫星服务器没有这些包并且正常的CPAN安装将不起作用,因为主机受到如此限制.移动模块源并进行编译非常繁琐.我已经这样做了一天多,试图解决依赖关系,看不到尽头.有没有办法解决?任何帮助是极大的赞赏.
因此,我必须使用JavaScript确定专有CRM中的页面类型.确定页面类型(即前端唯一一致的差异)的唯一方法是检查src属性以/ modules /开头的脚本标记(在许多列表中).
在标题中的十几个脚本标记的列表中,每个页面都有以下格式的行
<script src="/modules/example/includes/sample.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
现在,脚本标记的顺序永远不会相同,但是,总有一个脚本具有/ modules/blah.我需要提取blah到我的脚本可以检测它是什么样的页面.
那么,我如何使用JavaScript或jQuery提取脚本标记的src值,其中src以/ modules开头,然后将值('示例',在上面的示例中)存储为javascript变量?
很快成为一名专业的.NET开发人员(我希望),我开始深入研究Windows Presentation Foundation(WPF).看几个视频教程,我发现GUI的设计是一项艰巨的任务.必须在每种情况下,在每种情况下,为每个平台指定每种颜色,这似乎有点过分.在设计方面,如何使这个过程更简单,更通用?是否有任何模板可以开始,或者在设计看起来吸引人之前是否需要指定几百行XAML?
考虑下面的代码块......
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="LightGreen" />
<Setter Property="Foreground" Value="DarkGreen" />
</Style>
Run Code Online (Sandbox Code Playgroud)
...遗漏了悬停和按钮样式的属性,需要额外的XAML行才能完成开发人员想要的操作.
可能有一个简单的XAML编辑器来提高生产力?如果没有,它只是挖掘XAML并开始构建样式,以备后续项目.
要检查值类型是否可为空,我现在正在执行以下操作:
int? i = null;
bool isNullable = i.GetType().ToString().Contains("System.Nullable");
Run Code Online (Sandbox Code Playgroud)
有没有更优雅的方式来做到这一点?
我一直在研究远程git存储库的本地克隆,将我的更改提交给我的本地主分支.现在,我想将我的提交推送到远程存储库.但是,我想保持我的本地提交与远程主分支分开,这样我就不会破坏任何东西.如何将本地提交推送到新的远程分支?
采取以下控制器操作
public ActionResult NextBySURNAME(int id, string data)
{
//code to process the data and edit the id accoringly not written yet
return RedirectToAction("Edit", new { id = id });
}
Run Code Online (Sandbox Code Playgroud)
如果我用/ Mycontroller/NextBySURNAME/12/Smith%20Simon调用它
然后它工作正常(在这种情况下编辑记录12)但是
/ myController的/ NextBySURNAME/12 /史密斯%20
给了我一个404
现在我知道在某些情况下我的问题域尾随空白是很重要的,所以我不只是想修剪它.那为什么这会破坏我的路线呢?
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}/{data}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional, data=UrlParameter.Optional } // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud) 我今天正在阅读研究人员发现NVidia的Phys-X库使用x87 FP与SSE2.显然,对于速度超过精度的并行数据集来说,这将是次优的.然而,文章作者继续引用:
英特尔在2000年末引入P4后开始不鼓励使用x87.AMD自2003年K8以来已弃用x87,因为x86-64定义为SSE2支持; VIA的C7自2005年以来一直支持SSE2.在64位版本的Windows中,x87不适用于用户模式,完全禁止在内核模式下使用.自2005年以来,业内所有人都推荐SSE超过x87,除非软件必须在嵌入式Pentium或486上运行,否则没有理由使用x87.
我想知道这件事.我知道x87内部使用80位扩展双精度值来计算值,而SSE2则不然.这对任何人都没关系吗?这对我来说似乎很惊讶.我知道当我对平面中的点,线和多边形进行计算时,在进行减法时,值可能出乎意料地错误,并且由于缺乏精度,区域可能会折叠并且线条会相互别名.我想,使用80位值与64位值可能会有所帮助.
这是不正确的?如果没有,如果x87被淘汰,我们可以用什么来执行扩展的双FP操作?
敏捷/ Scrum是答案吗?Scrum如何处理这个问题?
一个产品负责人,一个产品积压与多个产品所有者和产品积压?
它对你有用吗?请分享你成功失败的故事?
我正在尝试将一个流程放在一起来管理多个工作队列,包括基础设施项目,简单的功能增强,然后是一个由6-7个开发人员组成的小型开发团队的大型项目.