数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
安装 PrintManager 和 SQL Server 所遇到的问题

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

安装 Autodest PrintManager 所遇到的问题 / 安装 SQL Server 所遇到的问题

  为了参考一下打印服务器的工作流程,特地找了个Autodest PrintManager 来看看。

  Autodest PrintManager的安装步骤:
 
  步骤一.PrintManager数据库安装
  步骤二.PrintManager Web站点安装
  步骤三.PrintManager打印服务安装
  步骤四.注册

  主要是在“步骤一.PrintManager数据库安装”碰上了问题。
  问题1:
  PrintManager数据库需要安装在有Sql Server的机器上,所以得先安装Sql Server。
  安装SQL Server2000时,系统弹出一个警告信息框,显示"以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机!"。
  重启后问题依旧。
  于是上google搜索:
  出现最多的文章是"一次SQL Server 2000 安装奇遇",但却不知所云,文章并没找到问题实质;
  继续搜索,终于找到答案了,删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations即可。

  造成问题的直接原因牵涉到一个老问题————PsDriver,参看附录。

  问题2:
  安装SQL Server2000后,继续安装PrintManager数据库,提示错误"[DBNETLIB][Connection(Connect()).]SQL Server does not exists or access denied."
  查阅PrintManagerde文档,原来是PrintManager要求Sql Server的sa用户必须设置口令,于是不得不重装一次Sql Server。


  由于只是想看看PrintManager是如何工作的,所以注册与否并不重要。不过用SoftIce简单跟了下,PrintManager的注册保护似乎并不是很复杂,有空时可以试试。

附录:PsDriver的老问题

  PsDriver是很久以前的东西了。

  简单地讲,PsDriver就是在Window2000下,创建一个虚拟打印机,其他的Application可以方便地通过这个打印机生成PS文件,再加上Acrobat  Distillr的配合,就可以生成PDF了。

  现在由于Print Manager的缘故又把它牵扯出来了,尽管目前涉及的只是个小问题而已。

  PsDriver是调用AddPrinterDriver来安装打印机的。

  AddPrinterDriver的调用者只需要把有关的驱动程序拷贝到目录:%SYSTEM%\spool\drivers\w32x86

  调用AddPrinterDriver时,系统会把这些文件拷贝到目录:%SYSTEM%\spool\drivers\w32x86\3

  具体到PPD:
  第一次安装时,系统把PPD文件拷贝到"%SYSTEM%\system32\spool\drivers\w32x86\3"下,并生成一个BPD文件。当重复安装时,系统会根据PPD文件的修改日期来决定是否更新PPD。如果PPD是新的,替换掉旧的PPD,也就是再拷贝一次;否则,do nothing!

  现在的问题是,如果最开始提供的PPD文件是只读的话,系统只是拷贝文件,文件属性不会改变。当需要更新PPD时,因为"%SYSTEM%\system32\spool\drivers\w32x86\3"下的PPD也是只读的,系统拷贝将会失败!!!
  于是,系统会修改注册表,在:
  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\
  下写入一个键值:
  PendingFileRenameOperations = "\??\C:\WINNT\system32\spool\DRIVERS\W32X86\3\New\test.ppd\??\C:\WINNT\system32\spool\DRIVERS\W32X86\3\test.ppd\??\C:\WINNT\system32\spool\drivers\W32X86\3\Old\test.ppd\??\C:\WINNT\system32\spool\drivers\W32X86\3\Old"
  最后的尾巴没了,可以看出,前面一段是指出在系统重启时,用C:\WINNT\system32\spool\DRIVERS\W32X86\3\New\test.ppd覆盖C:\WINNT\system32\spool\DRIVERS\W32X86\3\test.ppd,这样以达到更新PPD的目的。
  注:这是典型的安装驱动的处理策略,但在目标文件是可读的情况下,这样是行不通的。

  后面一段代码尾巴没了,不明所以。

  重启机器后,实际的情况为:
  PendingFileRenameOperations = "\??\C:\WINNT\system32\spool\drivers\W32X86\3\Old\test.ppd"

  显然这是不合语法的,而且只能手工删除,正是它的存在,导致了上述SQL Server的安装错误!!!

  补充一下,这个问题早已经处理过了,就是在安装时,去掉PPD的只读属性即可。现在之所以碰到问题只是因为注册表里的垃圾没清理干净而已。

  过几天整理一下PsDriver,弄一个比较友好的小工具出来。




相关文章

相关软件