我们有一个 C# WinForms 应用程序,一个控件正在使用 DragDrop 来收集拖放到其上的文件。 最近,出于基础设施原因,决定将应用程序移至 Citrix 中并将其作为 Citrix 应用程序运行。 据我们所见,一切都按放置功能的预期进行。
在 Citrix 外部运行桌面应用程序时,DragDrop 工作正常,没有任何问题。如果从 Citrix 桌面启动,它也可以工作。但是,当将其托管为 Citrix 应用程序时,不会触发任何事件;不是 DragDrop 也不是 DragEnter。鼠标标记只有“拒绝”字形,就好像“AllowDrop”为 false。
我们发现有些应用程序可以作为 Citrix 应用程序运行(例如标准的 Windows 资源管理器或 Outlook),有些应用程序表现得很奇怪(如 Adobe),有些则根本无法运行(如福昕阅读器)。
编辑:这是测试问题时使用的代码的精炼。
public Form1()
{
InitializeComponent();
AllowDrop = true;
DragEnter += Form1_DragEnter;
DragDrop += Form1_DragDrop;
}
private void Form1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.All;
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
var formats = e?.Data?.GetFormats() ?? new[] { "<Null>" };
var text = $"Formats: {string.Join(", ", formats)}";
MessageBox.Show(text);
}
Edit2:我们公司的 Citrix 人员现在已经调整了 Citrix 环境,因此我们实际上可以获取事件,但不幸的是不是我以前使用的 FileDrop 格式。我们现在仅获取 FileContents 格式(从该格式获取时结果为 null)和 FileGroupDescriptorW(仅存在文件名,而不是路径)。 我们仍在与 Citrix 就此事进行合作,我将在最后发布结果。
我们的 WinForms Citrix 应用程序也遇到同样的问题,拖放功能不起作用。在桌面应用程序中它运行良好。
较新版本的 Citrix 中似乎有一个解决方案,您应该能够配置拖放行为:https://support.citrix.com/article/CTX289473/drag-and-then-drop-files -citrix 会话和本地端点之间
另一种方法是将文件从其他 Citrix 应用程序拖放到您的 Citrix 应用程序中。在我们的例子中,用户将文件从 Outlook 拖到我们的应用程序中。一旦用户从 Citrix Outlook 或 Citrix Windows 资源管理器中执行此操作,它就会起作用。