1

我们有一个 PowerBuilder 12.1 应用程序,我们一直在 Windows 2008 R2 64 位服务器上运行。我们正试图让这个应用程序在我们新的 XenApp Citrix 环境中运行。如果在启动 PB 应用程序时用户的配置文件不存在,则开始创建配置文件 - 它正在创建各种目录和子目录。不知道为什么。但是,在配置文件完成之前,它会爆炸并中止执行。如果用户在没有配置文件的情况下首先运行写字板 - 将正确创建配置文件。创建配置文件后,可以毫无问题地启动 PB 应用程序。我们在主程序第二行的 PB 应用程序中放置了一个弹出对话框,当没有配置文件并且执行中止时,该弹出窗口永远不会被调用。与写字板一样,一旦创建了配置文件,就会启动 PB 应用程序,

有没有人看到这样的行为?我不确定是什么原因造成的,并且无法访问 Citrix 服务器,它由我们的技术服务组管理。他们说问题一定是 PB 应用程序。我不确定。任何关于我们如何解决这个问题的想法都将不胜感激。PB 应用程序应该能够在 Citrix 中运行,对吧?我不知道在这种环境中 PB 应用程序的启动过程是什么,但我认为执行将在主程序中开始。这个对吗?

提前致谢,Bill44077

4

1 回答 1

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.使用新的非可视化,调用你的setter来设置windows配置文件实例变量,然后使用你的新函数代替PB标准配置文件函数。

于 2017-09-20T01:33:51.737 回答