我们有一个PowerBuilder 12.1应用程序,我们一直在Windows 2008 R2 64位服务器上运行。我们正在尝试使此应用程序在我们的新XenApp Citrix环境中运行。如果在启动PB应用程序时用户不存在配置文件,则会开始创建配置文件 - 它会创建各种目录和子目录。不知道为什么。但是,在配置文件完成之前,它会爆炸并执行中止。如果没有配置文件的用户首先运行写字板 - 则会正确创建配置文件。创建配置文件后,可以毫无问题地启动PB应用程序。我们在主程序的第二行的PB应用程序中放置一个弹出对话框,当没有配置文件并且执行中止时,弹出窗口永远不会被调用。创建配置文件后,与写字板一样,然后启动PB应用程序,弹出窗口将按预期显示。
有没有人看到过这样的行为?我不确定是什么导致这种情况,并且无法访问Citrix服务器,它由我们的技术服务部门管理。他们说必须是PB应用才是问题所在。我不确定。关于我们如何解决这个问题的任何想法将不胜感激。 PB应用程序应该能够在Citrix中运行,对吧?我不知道在这种环境下PB应用程序的启动过程是什么,但我认为执行将从主程序开始。这是对的吗?
先谢谢, Bill44077
答案 0 :(得分:0)
如果由于权限而无法在Citrix上保留用户个人资料,则此功能可以正常使用,您可以将其用于基于Web的应用程序或n层应用程序(在服务器端)。
向系统添加数据库表以模拟PB配置文件功能。
新表:
// citrix_user_profile (new table pseudo-code)
//
// id = identity, not null
// userid = type of userid in your DB, not null
// filename = char, not null
// section = char, not null
// key = char, not null
// value = char null
1。创建新的自定义非可视用户对象:n_user_profile
2. 添加类似于:
的实例变量protected:
// todo: write a setter and getter
boolean ib_use_windows_profile = false
constant int FAIL = -1
constant int SUCCESS = 1
3. 添加定义类似于:
的函数int = of_setprofilestring(string as_filename, string as_section, string as_key, string as_value)
编码类似:
// If windows profile use PB standard function,
// otherwise use citrix user profile logic
If this.ib_use_windows_profile Then
Return SetProfileString(as_filename, as_section, as_key, as_value)
Else
// Pseudo-Code
//
// Does an entry exist in the database for this user, filename, section, key?
// Yes: Update the table with the new value
// No: Insert entry to the table with values
Return this.SUCCESS // success or fail
End If
4. 添加类似于以下功能:
string = of_profilestring(string as_filename, string as_section, string as_key, string as_default)
编码如下:
// If windows profile use PB standard function,
// otherwise use citrix user profile logic
// if you don't have access to user info then
// add it to the argument list.
If this.ib_use_windows_profile Then
Return ProfileString(as_filename, as_section, as_key, as_default)
Else
// Pseudo-Code
//
// Does an entry exist in the database for this user, filename, section, key?
// Yes: Return the 'value' from DB
// No: Return the default value passed via parameter
Return as_default // or value from database
End If
5. 使用new non visual,调用setter设置windows profile实例变量,然后使用新函数代替PB标准配置文件函数。