通过ICA文件从Client CMD传递参数以启动已发布的Citrix App

时间:2012-01-13 17:21:31

标签: command-line parameters citrix xenapp

我正在尝试使用CMA线路调用从C#web应用程序代码向Citrix XenApp Server发送一个简单的字符串参数,以启动特定的已发布应用程序(宏调度程序宏编译为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的所有组合,所以如果有人能帮我解决语法问题,我真的很感激!我确实试过在c#中查看ICA Client SDK代码,但它似乎只是手动执行外部ICA文件将执行的操作。但是,如果这是错误的,请告诉我。我正在接近我将要尝试它的点,因为我完全没有想法。请帮助。

谢谢!

1 个答案:

答案 0 :(得分:5)

我最后使用以下内容从我的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();

参考:Run bat file in c# with .exe and .def code

在.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的已发布应用程序的位置属性后面包含“%**”,包括双引号。我相信添加第二个星号可让参数通过命令行验证,并允许在打开应用程序时使用它。无论哪种方式,它都与它们中的两个一起工作而不是其中一个。