9

我正在尝试使用对 ICA 文件的 CMD 行调用将一个简单的字符串参数从 C# Web 应用程序代码发送到 Citrix XenApp 服务器以启动特定的已发布应用程序(宏调度程序宏编译成 exe),而不是整个 citrix 桌面。

我有一个带有 cmd 行代码的网络应用程序,使用

"C:\Program Files (x86)\Citrix\ICA Client\Wfica32.exe"  C:\someICAfile.ica \Param:"/username=SomebodysName" .

我也尝试过参数语法:/username=SomebodysName, /Param:"/username=SomebodysName"

以及大约一百万个其他引号和斜线组合。

我使用 Citrix QuickLaunch 编写了我的 ICA 文件,其中我唯一更改的是InitialProgram=#ApplicationName \Param(我添加了 \Param)。我也尝试过/username\Param=SomebodysName但我也无法让其中任何一个工作。我什至尝试在其中硬编码名称,但我无法让它通过。

exe 需要一个参数“ username”,当从 cmd 提示符本地调用时,它使用UsernameProgram.exe /username=somebodysname. 我确保在 Citrix Xenapp 应用程序位置属性%*的末尾包含“”,commandlineexecutable以确保它可以接受命令行参数。

这一切都使用 C# 和 XenApp 6。除了传递参数外,一切正常,我不知道参数丢失在哪里,如果它甚至到达任何地方。我觉得我已经尝试过 /'s \'s 和 "'s 的所有组合,所以如果有人可以帮助我解决语法问题,我将非常感激!我确实尝试在 c# 中查看 ICA Client SDK代码,但它似乎只是手动执行外部 ICA 文件将执行的操作。但是,如果这是错误的,请告诉我。我正在接近我将尝试它的地步,因为我完全没有想法。请帮忙。

谢谢!

4

1 回答 1

6

我最终使用以下命令从我的 C# 代码中调用了一个 .bat 文件:

Process proc_Launch = new Process();
proc_Launch.StartInfo.FileName = "CreateTempICA.bat";
proc_Launch.StartInfo.RedirectStandardError = false;
proc_Launch.StartInfo.RedirectStandardOutput = false;
proc_Launch.StartInfo.WorkingDirectory = @"C:\WorkingDirectory";
proc_Launch.StartInfo.Arguments = @"""/username=somebodysname""";
proc_Launch.Start();

参考:使用 .exe 和 .def 代码在 c# 中运行 bat 文件

在 .bat 文件中,我创建了一个传入用户名参数的 ICA 文件,如下所示:

@echo off
:makefile
pushd %temp%
set icafile=temp.ica
@echo [WFClient] > %icafile%
@echo Version = 2 >> %icafile%
@echo HttpBrowserAddress=ServerName:8080 >> %icafile%
@echo ProxyType=Auto >> %icafile%
@echo ConnectionBar=0 >> %icafile%
@echo [ApplicationServers] >> %icafile%
@echo ApplicationName= >> %icafile%
@echo [ApplicationName] >> %icafile%
@echo Address = ApplicationName >> %icafile%
@echo InitialProgram=#"ApplicationName"%1 >> %icafile%
@echo ClientAudio=On >> %icafile%
@echo AudioBandwidthLimit=1 >> %icafile%
@echo CGPAddress=*:#### (use actual numbers here though) >> %icafile%
@echo CDMAllowed=On >> %icafile%
@echo CPMAllowed=On >> %icafile%
@echo DesiredColor=8 >> %icafile%
@echo ConnectionBar=0 >> %icafile%
@echo TWIMode=On >> %icafile%
@echo Compress=On >> %icafile%
@echo TransportDriver=TCP/IP >> %icafile%
@echo WinStationDriver=ICA 3.0 >> %icafile%
@echo BrowserProtocol=HTTPonTCP >> %icafile%
@echo [Compress] >> %icafile%
@echo DriverName= PDCOMP.DLL >> %icafile%
@echo DriverNameWin16= PDCOMPW.DLL >> %icafile%
@echo DriverNameWin32= PDCOMPN.DLL >> %icafile%
start %icafile%
popd

InitialProgram 组件中的 %1 是在 C# 代码中使用参数的位置。

参考: http: //www.virtualizationadmin.com/files/whitepapers/MetaframeXP/Connecting_to_a_Citrix_server_from_the_command_line.htm

最后一步是确保在您的 Citrix Delivery Console 中确保 CommandLineExecutable 的已发布应用程序的位置属性后面有一个“%**”,包括双引号。我相信添加第二个星号可以让参数通过命令行验证并允许在打开应用程序时使用它。不管怎样,它与其中两个一起工作,而不是与其中一个一起工作。

于 2012-01-17T20:29:58.737 回答