SwiftPublish Release Notes Release 2.7 5/11/2006 New Features For 2.7: SwiftPublish has new features aimed at file conversion and print and document workflow applications: - new Directory Monitor - Support batch conversion of PDF and HTML with Acrobat and Internet Explorer - new TIFF output capability (uses SwiftConvert) SwiftPublish's former website upload and package Builder GUI features are still supported for existing customers and special requirements, but are no longer advertised or configured in the standard installer. F4977: spupload can now be used as a standalone SwiftSend upload utility. F5045: up to 3046 files in one batch. For 2.6: Fixed several memory/handle/temp file leaks, so SwiftPublish can be used under an NT service. Change to using port monitor instead of language monitor; decreases printer maintenance issues B3934: minor descrambling problems Minor install and uninstall issues. Several minor licensing issues. B3488: fixed non-backward-compatible web upload protocol change. Start installing our own driver, as Windows driver no longer usable. For 2.5.1: F3243: Fully searchable and copyable text from most Windows applications. For 2.5.1: F3243: Fully searchable and copyable text from most Windows applications. SwiftView 7.1 is required. F2512: SwiftPublish can now be installed and used for base printing on Citrix or Terminal Server, and won't put messages on the console. For 2.5: F3446: make printer caching the default. Now printers aren't deleted when a package is closed, greatly improving performance, especially on XP. F3287: allow disabling base printing. Add a registry entry that causes all printing to the base printer to be silently discarded. For 2.4: F3102: Support multiple simultaneous packages, especially on Citrix and especially under heavy load. F3182: Performance update to DOS port capture. Incorporated a new mechanism to cache data in dos prompts to try and improve performance of dos port capture to the printers. F3240: Speed up package creation and destruction. 1. Make sharing of printers optional, enabled by a new SharePrinter attribute that is set only when port capture is enabled in the GUI. 2. If the registry value HKEY_LOCAL_MACHINE\Software\SwiftView\SwiftPublish\CachePrinters (DWORD) is non-zero, cache printers on a package delete, to be reused in the next package. F3051: 2-phase disposition SwiftPack API feature. Allow a SwiftPublish integrator to supply attributes and still display the disposition page on website upload to augment/modify the settings. The caller can supply attributes to the SwiftPack API as in BatchDisposition mode, but the user still sees the disposition page in the browser, initialized with the supplied attributes. F3227: expand environment variables in OutputProgram path. The OutputProgram setting to invoke a program on the print file can now include environment variables as "$var". For example, you should use $ProgramFiles on 2K+, so as to reliably invoke a Windows program from it's standard install location. For 2.3.4: F2990: Display any licensed customer string in help. "This program licensed to:" F2873: display success message on printer match instead of failure on non-match. Remove current non-matching message box, instead give a positive, or less boastful or negative (if WarnNoMatch is set) message in the final success dialog. F2783: LAN licensing. Add LAN license for SwiftPublish and SwiftReprint. For 2.3.3: F2776: Remove SwiftStamps and unzip PCL files added to packages. Either would break the package. F2795: Don't display port capture status dialog at first use. Most people won't know what it's about, so only display it when port capture is reeenabled in the options dialog. For 2.3.1: Highlights: Port capture of print jobs from DOS applications (e.g. Mortgageware) is now supported on win9x platforms. (there may be minor problems on winME). The user can choose to force ports to be captured regardless of the port's printer type. SwiftPublish can be configured to use the user's default printer's driver and printer properties, if the driver is usable. Also, manual settings in the base SwiftPublish printer are now reliably copied into each package when it is created. All message boxes have selectable text, making reporting errors easier. SwiftPublish can now be used reliably with simultaneous packages on a multi-user server such as Terminal Server or Citrix. However, we still recommend whenever possible installing SwiftPublish only on client machines, not servers. Users can now optionally share packages in the GUI. By default, a user only has access in the GUI to packages they created. Configurable login dialog, including easier first-time originator signup. Duplexed printing is now supported, using the lj5 driver. It should no longer be possible for SwiftPublish to crash the windows spooler. Details: F2580: Prevent passwords from being written to server logs. User passwords sent to the SwiftSend authorization page are being written to the Apache log. Prevent this by changing the get request to a post. For 2.3 (many of these features do not work reliably until 2.3.1): F2524: Detect missing driver.cab. SwiftPublish extracts the printer driver it installs from the win2k/XP driver.cab file. Occasionally some system administrator removes this file. SwiftPublish now detects this condition and reports an error. F2523: Add registry override to force syncronous package upload. Packages upload in the background by default. However, since this has caused problems in the past, we have added a registry entry HKEY_LOCAL_MACHINE\Software\SwiftView\SwiftPublish\GuiSyncUpload type DWORD, which if non-zero forces uploads to be done syncronously. F2504: handle multiple users and multiple packages on a server system. SwiftPublish can now handle multiple users sharing a package. By default the GUI now only allows access to packages created by the user. There is a system-wide multi-package option accessable from the options dialog, in addition to the existing -multi command line option, which enables access by all users to all packages existing on a system. - Show creator username in multi-package choice dialog - Pop package choice dialog on package close in multi mode. - Recover in the multi mode when two guis have the same package up and one finishes/deletes it: discard the package with a user notice. - move package .tpf temporary file to c:Program FilesSwiftViewtemp, so all users can write it. F2500: Resolution config option no longer supported. SwiftPublish no longer supports the Resolution printer config override. It's still accepted, but it may not work properly. F2487: need to display all version #'s and timeout date in the gui. for example, be able to see when your debug spub is slated to die. F2479: Limit swiftpublish.log to 2M, allow removal. Limit swiftpublish.log file size to 2MB, allow all logfiles to be moved/edited/renamed unless the Spack GUI is running. Previously, as long as spooler or auth server were running (i.e. all the time on 9x), you could not remove the log file. F2470: Allow upload with no Disposition page. Allow upload with no Disposition page, for systems where it's not possible to browse the internet. Just do nothing if RegistrationPage is not set. Both batch and interactive uploads. F2468: implement port capture for 9x platforms. Port capture now works on all 9x platforms, using a different low-level interrupt mechanism. All data sent to a port with less than 5 seconds between data transmissions is added to a package as a single print job. Note that Windows applications printing to printers on LPT ports are not captured, as they are on NT+. Windows apps must print to the default printer to add to a package. Note also that to make port capture work, the user must NOT have the printer property sheet option Details...Port Settings...Spool MS-DOS Print Jobs checked. SwiftPublish unchecks this option at installation; the consequences are that when not printing to a package, the user should not print from both Windows and DOS apps to the same port at the same time, and DOS printing apps will not finish printing as quickly. F2467: Allow user to force port capture regardless of port's printer type. Enough users have no valid PCL printer, yet want to capture ports, that we need a force-capture option. Default remains unchanged. F2462: Problems with simultaneous packages, esp. terminal server, asynch batch upload. Eliminate problems with package open/close race conditions: - Atomically choose new package name+id. - avoid former names of packages still in asynch upload. This fix means you will get alternating package names like SwiftPublish Package 1, SwiftPublish Package 2, SwiftPublish Package 1... - Insure SPackBusy() mutexes work with multiple users on terminal server. - Insure unique temporary filenames. Some problems remained until v2.3.1, see B#2568. F2461: remove printer type info on uninstall. So that uninstall insures a clean reinstall, remove the cached printer type data on uninstall. Same as SwiftView #2460. F2458: match the default printer and base printer driver and settings. Properly support using the user's default printer's driver. Copy all of the default printer's properties if we are using the same driver, and copy all base printer properties to a package. Optionally require that the default driver do duplex, mixed pages, color, and/or 600 dpi to use it. F2387: All message boxes need selectable text. Description Replace MessageBox() with an equivalent with selectable text. Many uses, esp. copying error text to email, urls to browser, etc. F2385: Configurable login dialog, originator registration support. Enhancements to the login dialog for first-time originator signup (for e.g. Fiserv): - Display the "Register" button immediately on the login screen if no username exists in the registry. - Make strings in the login dialog configurable per-printer. Different string LoginNoUserHelpString if no username is saved yet. - Show the print jobname in the login dialog titlebar. - Output the username if any to the RegistrationPage. F2338: Improve zip encryption security. Steps have been taken to make it harder to crack encrypted, passworded packages. F2334: Check SwiftSend max upload size before uploading. SwiftSend should send, and SwiftPublish check, user and hard limits on upload size in the authentication page reply. F1852: Support duplexing. Replace preferred/downloaded lj4 driver with the mslj5, to support duplexed printing. F2351: Improve error messages on internet access failures. On bad internet access, don't talk about no licensing, but about fixing their internet access! F2345: Make saving the login user/pass default to on. No good reason not to save the login username and password - and really need to save it to better select presentation of Register New User button (new feature). For 2.2: XP is now fully supported. Operation by a non-administrative user on all NT+ operating systems is supported. Installation still requires that the user be a member of the "Administrators" group. Terminal Server systems are now supported, but note the known bugs above or fixed in 2.3. Because of the consequences of breaking the printer subsystem on a Terminal Server, installation of SwiftPublish on Terminal Server or Citrix systems is not recommended at this time. On NT, 2K, and XP systems, direct output to an LPT1-9 printer port (e.g. from a DOS application) is now redirected to the current Package Builder GUI package, if: - that port is the port of a local Windows printer whose driver outputs PCL. - "Capture output to LPT printer ports" is enabled in the Package Builder GUI options. Port capture is currently unavailable on win9x systems. SwiftPublish can now use any suitable printer driver installed on the system. If the driver for the default printer is suitable, or if exactly one suitable driver if found on any printer, we use it. If no suitable driver is installed, a standard driver is installed; we no longer build our own driver. "Suitable" is defined by new AllowedDriverTypes, TestedDrivers, BadDrivers, and IgnoredDrivers .ini settings. We are not using this feature in 2.2, however, because of issues fixed in 2.3 (see above). Existing SP drivers are obsolete and will be replaced in an upgrade install. Note that it is possible to install different drivers for different SwiftPublish printers on the same system, if the printer installer portion is run after the driver installer. 600 dpi is now supported on all platforms, and the standard SwiftPublish installers use whatever resolution the existing printer driver is set to, or 600 dpi if installing a new printer driver. Formerly only 300 dpi could be output on NT. Some apps, e.g. Word, generate PCL print files at 600 dpi which display badly spaced text in SwiftView (they direct-print fine from SwiftView). As a result, we formerly recommend using SwiftPublish at 300 dpi. Now, 600 dpi is preferred except for certain types of documents (generally with lots of images) that would be too large. (Actually fixed in SwiftView 5.6.) SwiftPublish now provides the installed SwiftPublish version, hostname, and whether the user has admin privileges to the web site so that the web site can request installation of a newer version. SwiftPublish now displays the installed SwiftPublish version in the help area of the Package Builder GUI. Installer now displays a progress dialog during driver installation. Known Problems SwiftPublish requires Windows 98 Second Edition or NT4+SP4 and IE 5.0 or later. win2k/XP text descrambling (for text search and copy) has some limitations: - It does not work for Word "Smart Quotes" characters which cause "block" characters to be rendered. - It does not work for applications like Acrobat which only print full-page images. Some applications, e.g. Regedit on Windows 95/98, do not detect a change in printer settings, e.g. resolution (dpi). The print dialog resolution property and the actual resolution used do not follow the printer setting. If the application is restarted, the new printer setting is detected. The user can set the resolution from the print dialog properties, and it will be obeyed. This is not fixable in SwiftPublish. On all 9x/ME, manually setting the dpi from the properties dialog doesn't work. The Windows 2000 HP LaserJet 4 driver properties dialog is confusing: setting the resolution in the Advanced...Printing Defaults...Advanced dialog may not take effect because it is only setting system-wide defaults. You must set it from General...Printing Preferences...Advanced - this gets a dialog that looks the same, but it is per-user and overrides the default settings. Test prints from a SwiftPublish printer may not produce the correct resolution. A 300 dpi printer on win98 has been observed to produce 600 dpi test prints. This does not indicate a problem in actual SwiftPublish use. On NT or win2k, if you print multiple large SwiftPublish jobs for upload to SwiftSend, then logout, some jobs may fail, especially in the presence of proxies. Batch uploads that do not require interactive login to the web site still may need the user to be logged in to the workstation order to upload through a proxy server - the user may need to be queried for proxy login. In rare cases on win9x/ME, the install will fail to create a printer because it was unable to create the SWIFTSEND port. The user is asked to create the port manually, then continue. Also, occasionally, an "Add Port" dialog is displayed, simply dismiss and the install will succeed. Operating on simultaneous packages is not supported on win9x. Word 2000 SR1 can crash during a SwiftPublish install on Win2k. Word 2002 doesn't crash. On NT/2K/XP, while a package is active and "Capture output to LPT printer ports" is enabled, you cannot print to a real printer whose printer driver is connected to an LPT: port; the data wil be redirecte to the package. On 9x, windows printers printing to LPT ports are not redirected to the package. If you rename a package printer from the Windows Printers dialog, the Package Title in the Package Builder GUI is not updated. Unzipped uploads to SwiftSend will cause a number of extra blank pages to be generated at the end of the package. Restore zipping to the default of enabled to prevent this. Adding an HTML file with Netscape doesn't work. If SwiftPublish installed on a client machine uses a driver of an existing client printer, and that driver is not available on the server, the SwiftPublish printer will not be available to server applications. Citrix access to a client printer depends on a driver of the same name as the client printers's driver being installed on the server, in the server's Windows drivers.cab driver distribution file, or remapped by Citrix server utilities to an available driver. (The current loandocs SwiftPublish installer is not using drivers of an existing client printer, so this isn't an issue.) After installing SwiftPublish or creating a SwiftPublish package on a client machine, Citrix server remote desktop sessions must be exited and restarted to create a fresh session to see the new printer. But exiting and restarting may resume the same session and not reconnect printers, depending on how long you wait between exit and restart and on the following server settings: Administrative Tools...Computer Management...Users and Groups... ...Properties...Sessions: - end a disconnected session - when a session limit is reached or a connection is broken Setting these to the shortest time (1 minute) and "disconnect from session" will make it easier to see new printers. Application sessions do not have this problem. This problem also occurs with setting of the default printer: when the package builder GUI starts or stops, setting the default printer to the package or to the system printer, the session does not see the change, even if the printer list is refreshed. On Terminal Server or Citrix, dialogs appear on the console or first XP user instead of either the user's local or terminal server session desktop. All message boxes and other dialogs (such as the save-to-file dialog and login dialog) from base printing on a server-installed SwiftPublish printer on Terminal Server/Citrix, and many message boxes from base printing on XP display on the TS/Citrix console or on the desktop of the first user logged into XP. This is NOT a problem with running SwiftPublish on a client machine and printing from a TS session on that client machine, and is not a problem with packages in any configuration - except for error dialogs from the spooler that result from an app printing to a package - though normally they shouldn't occur. SwiftPublish should not be installed on a Citrix server from a Citrix client session, only from the console. Descrambling will not work with SwiftPublish installed on a Citrix client unless it is also installed on the server, using the same named driver. SwiftPublish package builder installed on a Citrix server farm with more than one server can only be used from a client machine by running the package builder GUI and the application on the same server. This normally means that you must run the SwiftPublish GUI and applications in the same terminal server session desktop. If the application and the GUI are run as separate sessions, load distribution may execute them on different servers. Also, if you start a package, then disconnect and reconnect, you may get a different server and the package will not be accesable. SwiftPublish installed on a Citrix server is not compatible with distribution of printer drivers on a Citrix server farm using the Citrix replication tools, we think. The reconnect the driver fix in 2.3.4 will fix this. Save to file to a mounted network filesystem fails on NT+ if you login as a domain user. Network drive mounts don't exist in an impersonated session for unknown reasons. You can verify this by running a dos box "as user": Start...Programs...shift-right click on "command prompt"...Run as... then run as yourself (whoever you are logged in as). We believe that this is equivalent to what we are doing in SwiftPublish. Type net use into this DOS box, and you will see your usual mounted shares ONLY if you are logged in locally, NOT if you are logged into a domain. A workaround for this is to save to a UNC name, e.g. \\b2\l_drive\foo. Install fails with 2k 'HP LaserJet 4050 Series PCL 6' driver. 2.3 SwiftPublish will attempt to use the "HP LaserJet 4050 Series PCL 6" driver if it is used by the default printer, and produce a slew of error messages: "Invalid parameter passed to language monitor" appear. Other drivers may also exhibit this problem. If around 400 packages are created, e.g. on a terminal server in a span of 7 days, the event system log will fill up with useless information and warning messages. Set the logging to overwrite events as needed. Some applications (e.g. WordPad) return a bogus error code when run to add a file to a package. The message from SwiftPublish can usually therefore be ignored. If you delete the SwiftPublish printers by hand using the print manager, on a reinstall the printer installer will be fooled into thinking the driver is still present, and will attempt to add the printer and fail. Not a problem if you delete via Add/Remove software. SwiftPublish is incompatible with the Microsoft Speech Engine - whichever is installed first will fail. More obscure bugs: Port capture has problems saving and restoring existing port mappings on Terminal Server when a single user is running multiple sessions. win2k/XP text descrambling only works with some PCL5 drivers, and no PCL6 drivers. Unless descrambling is disabled, SwiftPublish will not install with a PCL5 driver that cannot descramble. Currently, our descrambling installers only allow use of the Lj5Si driver. On win9x the spooler can crash during multiple SwiftPublish printer installs. Single installs are not a problem, so this is not a problem for normal SwiftSend use. On win95 prior to OSR2, the uninstaller may crash the spooler. It will complete successfully after a reboot. On win95, do not change the port of a SwiftPublish printer to other than "SWIFTSEND" and also change the printer name. Note that on win95 if you rename a second printer without first using the previously renamed printer, you must interactively select the former printer name to restore the configuration. If a base printer previously selected in the gui is deleted, the options field will come up blank. Can select a different base printer from the list to correct it manually; even without this some available base printer will be used without error. Sometimes when installing from a web site on win98 second edition with no printers installed yet, you will get the following message, e.g. with Netscape 4: ---------------------------------------------------- System File Error The following system files have been replaced wth older versions by a program you recently ran. These files are currently in use and cannot be automatically repaired. Windows may not run correctly until you exit and restart Windows so that these files can be automatically repaired. C:\WINDOWS\SYSTEM\UNIDRV.DLL ------------------------------------------------------ This message can be safely ignored; it may recur when installing other software until you reboot. Netscape installs leave the installer executable in the windows temp directory after the installation completes. And my favorite: SwiftPublish may fail with the error "Microsoft Encryption failed" on French Windows. Because of French Cryptographic import laws, the CryptEncrypt and CryptDecrypt functions fail on Windows NT 4.0 when the French Locale is chosen. A change in the import laws removed this restriction on Windows 2000. To enable CryptEncrypt and CryptDecrypt on computers that are running Windows NT 4.0, Service Pack (SP) 6a in French, the following registry key needs to be created: HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\defaults\CheckInfo A value named Mask should be created with a REG_DWORD value of 0xFF. Recently Fixed Problems For 2.5.1: B2512: Dialogs from base printing appear on TS/Citrix console/first XP user instead of user session. All message boxes and other dialogs (such as the save-to-file dialog and login dialog) from base printing on Terminal Server/Citrix, and many message boxes from base printing on XP display on the TS/Citrix console or on the desktop of the first user logged into XP. Error dialogs from the spooler when an app prints to a package are also affected, though they shouldn't happen. B3485: SwiftPublish loses non-sp printer data. For example, errors occur when printing to the SSP3 printer on a system where SwiftPublish is installed. B3494: Message handling still not working on XP with fast user switching. Not starting/using spclientsrv on XP with fast user switching: failed to detect it as TS-capable. B3481: SwiftStamping no longer allowed when base printing to file in demo mode. This was not a problem before 2.5, which started allowing base printing to file in demo. See also B#3450 in v2.5. B3492: install always requiring a reboot on XP/TS/Citrix. Installer was failing to shutdown this user's spclientsrv, so always had to reboot to install it. B3247: printing to cached printer for finished package: An error message should appear. The "SwiftPublish package 1" printer remains present in the printer list even after the package is finished ( it's "cached" ), and you should not print to it. B3487: v2.5 SwiftPublish use-users-driver doesn't recognize compatible printers on install. Even if your default printer has a compatible PCL driver, SwiftPublish says it could not find one, so it uses the default (LJ5) driver. B3456: v2.5 can't print to a package on 9x. B3483: printer caching breaks packages on XP in v2.4 With printer caching enabled, you get a bogus error when starting a second package: "This package has alraedy been closed or discarded". B3495: if proxy user+password changes, SwiftPublish can't recover. If the stored proxy user+pass is wrong, it doesn't redisplay the user dialog to get new ones. For 2.5: B3236: Windows 2003 server problems. B3450: LAN/WAN license must enable save from base printing. LAN/WAN license must enable batch save but not batch stamp, else we make a stamp mill. Zipping is OK and is enabled too. B3509: spclientsrv not being removed from run once on deinstall. No visible error is generated - unless the spclientsrv.exe is left installed and dlls it requires are removed or upgraded. B3324: SwiftPublish 2.4.0.2 incompatible with pre-6.3 SwiftView for preview. 2.4.0.2 switched to passing license with -l instead of set clientlicense. -l is ignored so it fails to license with pre-6.3 sview.exe. B3452: spubNNN.tpf file orphaned on error. If you get an error message e.g. licensing limitation on base printing, a tpf file gets left behind in c:\program files\SwiftView\temp. B3445: problems with display of license state in spack GUI: demo period/timebomb/LAN Licenses are not being correctly reported in gui info area. LAN license is not checked by timebombed version. Saved licenses are not being initialized until options dialog is displayed. Full license string failed to initially enable options after entering license, clicking OK, and redisplay of options dialog. B3275: debug logs can grow forever. Debug logs can grow rapidly on 2K, due to incorrect descrambling chaining/unchaining fixup. Can happen even with descrambling disabled. B2840: spauthserv fails on install. If an older, incompatible spcommon.dll is locked in memory on install on NT+, spauthserv pops a dll mismatch error during installation. Then a reboot is requested. This can occur sometimes without the gui up due to failure to successfully shut down the spooler. B3260: testing drivers for duplex now disabled. Some drivers crash on duplex requests, so for now the ability to restrict to duplexing drivers is disabled. For 2.4: B3283: ezsender-novell: printing to pkg causes spontaneous reboot. No ts or citrix involved, using novell client 4.9. Clients are win xp pro. When printing to easysender, machine just _reboots_. No error, no bluescreen. B3162: Unable to encrypt/decrypt passwords on some systems. Typical error message: "Microsoft Encryption failed". See also B#2796. B3109: SPackAbort() was not deleting the temporary file. The package temporary file was being orphaned on SPackAbort(), if an orphaned package (deleted printer) was detected, or on certain EasySender errors that produced the message: "Package close already underway, cannot add any more print files" B3226: Configured output program not run as the printing user. If SwiftPublish is configured with an "OutputProgram", that program wasn't run in the user's context when printing to a base printer. Fix: impersonate the user when executing a program from the spooler. B3216: Occasional URL failure on upload with error 12007. Occasionally for any number of reasons (network issues) we can fail to connect to the web server to upload files. Generally it's a DNS error where we could not resolve the servers name to an ip address. This is the same issue as when IE can't get to a website, you press refresh and it then connects properly. We now simply retry once if there is an error to ensure we really cant get to the site before reporting an error to the user. B3102: Random package failures under high load. Logs prove that a printer disappeared (at least temporarily) on a stress test with Fiserv easySender on Citrix. Only happens with Fiserv code, and (maybe?) only on multiprocessor systems. Most of the failures were due to easySender incorrectly deleting the printer on a package cancel - they are fixing that for an August release. We also found a number of observed and theretical inter-package race conditions that are fixed in 2.4. In addition, we forced serialization of all spooler operations in an attempt to lighten the spooler load. Finally, we insured that SPackAbort() cleans up all resources before returning as soon as possible, rather than waiting for the printer to go idle. See also F#3240 which further eliminates errors. B3255: Spurious port capture errors on some 2K systems. The GUI will say that port capture failed when it did not - just a bogus error trying to save any existing port mappings - our mapping is successful. B3122: Unable to install swiftpublish on windows 2003 server. B3107: Memory and Handle leaks. B3203: memory leak in SPack API. B3173: Logfile lines can step on each other; logfile grows forever. Debug logfile lines can get interleaved when multiple processes are executing concurrently. Also, the logfile wasn't being moved to .old when the 2MB limit was reached. B3218: Lost printers with multiple packages on Citrix. This was one cause of the 1801 errors reported by the Fiserv code - ones that occured e.g. on SPackSetAttribute(). Printers can still be lost due to a bug in Fiserv's code, if run as an administrator. Part of fix for B#3102. B3217: Occasional failure to ensure printer available during SPackOpen call. Fiserv EasySender reported an 1801 error (printer not found) on ??? operation. Part of fix for B#3102. B3159: the windows RunOnce registry setting runs as first user to logon to system. The RunOnce registry setting we use to fixup printers after an install with reboot actually will run as the first user who logs into the system, and that user may not have the admin rights needed to complete the installation properly (fixing up the printers). B3075: SwiftPublish fails with LAN SwiftView install. SwiftPublish will fail with a LAN SwiftView installation unless spupload.exe is installed in the LAN SwiftView program dir. B2984: base printing hangs if a dialog isn't closed (server issue). if someone prints to the base printer, then goes home without closing the login dialog, the spooler for that printer (e.g. loandocs) will be stuck. B3158: printer matching fails on bogus printer during install on Citrix. If you install the use-the-user's-driver installer on Citrix, it may try to match a "printer" that exists in the registry but isn't real, e.g. "Printers\Client\IBM-T40-3#\Auto SwiftPublish package 1" B2982, B3223: Bogus license error on non-admin to-file printing. If you print to a base to-file printer, or save a package asyncronously to-file as non-admin on XP from a time-bomed prerelease install, you get a bogus error "this non-production prerelease of SwiftPublish has expired" or "Error: Unable to finish. Not licensed for this feature. Not licensed for saving." B3175: SwiftNTULM crashes when a 'dead' printer is accessed in citrix. Citrix servers copy printers in from the client computer. Sometimes these printers are dead, deleted, or invalid, as they hang around for a while before noticing that they've been removed. When the system tries to access one of these printers, swiftntulm will gpf on it, displaying an annoying but otherwise harmless error dialog (since the printer is obviously non-functional.) B3177: SPackOpen mutex failing - allowing packages to step on each other. Multiple simultaneous packages by the same user were OK, by different users could collide with a variety of failures. B3171: Logged error 'Laserjet 5 has been reinistalled'. Every 30 seconds the spauthserv service checks for broken printers in the system (broken chains). Sometimes we get a condition where we think the chain is broken, but we also fail to correct the chain, so the error keeps repeating. We think the condition causing this is that the publish monitor isnt correctly installed somehow (we get unknown monitor error when we try to rechain). B3202: Handle Leak - spooler and spack.dll. Found a handle leak issue in the spooler and spack.dll while stress testing with sptest.exe (create+abort, no printing) B3237: SwiftView reinstall fails after OS upgrade: bad port. If you upgrade e.g.. from 9x to 2K, the printer port is damaged. Partly fixed before by removing on uninstall (B#2843, #2610), now we also remove and recreate it on every install. B3155: word and xl files lose pages on certain systems. When printing certain word and xl files from certain pc's, pages are missing and replaced by blank pages (actually here we see pages with no data in the blanks). The attached xl file fails for both Marsha Fowler and Dewey Kelly, but not Kevin Kroonen. B3066: Connect manually changed drivers. All drivers of all SwiftPublish printers are now chained at runtime, including drivers that were not previously chained, so manual driver changes work. On 9x, you must start a package to get the driver rechained, on other platforms you must wait up to 30 seconds. Install-time validation of the driver is NOT done, so any driver will be chained, whether deemed appropriate or not. B3042: update icons. Update to new icon, make sure it appears in all executables and the driver install dialog (could add to others, maybe.) B3110: Adding pcl/text file to package fails in marked customer installer. V2.3.3 started unstamping pcl files added to a package, but it passed the license to sv_stamp.exe which would fail in a customer-marked installer where sv_stamp.exe was not marked to match the license and spack.exe. For 2.3.4: B2915: default driver install fails on XP SP1. Several customer have reported a failure installing the SwiftPublish default driver on XP Service Pack 1. You can ignore the error if the driver is already installed or the use-the-user's driver installer uses another driver than the default. Fix is to ignore the error in the install unless the default driver is being used, in which case the error message gives workaround instructions. B2843: 98->XP upgrade makes SwiftPublish stop working. If a win98 machine with SwiftPublish installed is upgraded to XP, packages/new SwiftPublish printers can't be created. The SwiftSend port is damaged on 98 ->XP upgrade, and a printer can't be added with it. We may have also seen a damaged port for other reasons. Partly fixed before by removing on uninstall. B#3237, release 2.4, finishes the fix by recreating it on every install. B2610: uninstall doesn't remove SWIFTSEND port. One customer problem after an OS upgrade might be prevented by removing our port - they got ERROR_UNKNOWN_PORT on a reinstall. Partly fixed by B#2843: remove port on uninstall. B#3237, release 2.4, finishes the fix by recreating it on every install. B2976: all-user options fail for non-admin. "Access all User's Packages" and license should be greyed out. B2877: Slow on XP/win2k SP3 plus hotfixes. Most spooler operations, especially Start Package, have always been slow on XP. With V2.3.3, they are now slow on win2kSP3 plus some hotfixes. Start Package can take 23 seconds if there is more than one base printer, otherwise 14 seconds; it should take 3 seconds. B3064: reinstalled OS after installing SwiftPublish breaks SwiftPublish. message: "Internal licensing error: registry permissions" Same fix as sview B#2912. B2826: B2807: If you reinstall the printer driver used by SwiftPublish (i.e. install a printer using that driver, and reinstall the driver), SwiftPublish will no longer operate and must be reinstalled. A message to this effect will be displayed by the package builder, but printing to the base printer silently fails. SwiftPublish now re-chains the driver monitor if it detects that chaning has been broken. Note that this fix does not make it possible to change a SwiftPublish printer to use a driver that was not chained at installation (B#3066). On 9x, you must start a package to get the driver rechained. The driver is NOT checked against the installer selection rules. For 2.3.3: B2749: After finishing a package, all non-SP (network) printers disappear from the pc. Several customers using JetDirect printers through Novell Queues are losing those printers after SwiftPublish install/use/reboot. B2747: Too many workgroups broke login. SwiftPublish reports error 200 on login if the user is part of too many workgroups (e.g. 7). SwiftSend was returning unused workgroup names, which overwrote the return code in the read buffer. B2803: New from-install timebomb fails on French Windows. Microsoft Encryption is broken on French Windows - this still causes other problems noted above. For 2.3.2: B2708: non-admin users on XP can't print to base printer. print job upload to SwiftSend fails, message: uploading file C:\WINDOWS\TEMP\spub053000 for printer loandocs On Swiftest: File move failed B2707: users logged in with mixed-case login name may fail on upload. If the user logs in with a login name with upper-case letters, SwiftPublish may fail to upload as the user, and so network access may fail. Doesn't happen with local logins, either by making the account or the typed login name mixed-case. F2657: OEM licenses are broken by standard installs. If you install a standard SwiftView product installer over an OEM-licensed install, the OEM software will stop working. B2655: Real printers stop working. A customer of Fiserv reported that their real printers stop working when SwiftPublish is installed. They worked around it by installing a dummy default printer so we wouldn't chain their real one. B2678: Reinstalling with a different base printer name fails. The GUI's last selected base printer name is saved in the registry for this user. If the base printer is removed, a new one installed of a different name, and a new package started, the GUI picks up the old base printer name without validation, and errors on close: Internal error, SwiftSend web site is missing in printer registry key; please reinstall SwiftPublish Once you open and OK the options dialog, everything will be fine. B2654: Occasional internal error message. Occasionally, we get the message: SwiftPublish has recovered from a serious internal error in SwiftNTULMClosePort(), swiftntulm.cpp line 1918; operation aborted Once changing ports triggered it. B2673: Wininet error messages not shown. Wininet error messages on upload were (at least in one case) not displayed to the user, just the string "HttpSendRequestEx" For 2.3.1.4: B2630: Discourage changing package name. "Package Name" label in GUI had changed to "Package Title", encouraging people to change it, which breaks Citrix server apps' access to the package printer. Only allow changing name in options dialog, make package+base names read-only (grey) in main dialog, call it "printer name", not "package title". For 2.3.1: B2588: Red herring errors on upload, orphaned package. Sometimes the asynch upload runs fine, but the main thread thinks it failed, tries to upload synch, fails, leaves package unremoved, and causes error messages, including: "Error 4 cleaning up printer SPupload 524e5: The printer registry is missing a required value" B2587: descrambling partially enabled by default - sometimes breaks Word printing. per-printer descrambling flag was defaulting to on, and at least on XP caused descrambling modules to be activated, causing text loss in some Word documents. Seems to have been a problem back to v2.2.1 on XP - descrambling was supposed to have been totally disabled there, but apparently not. B2583: Upload errors are not reported. Errors during upload are not reported to the user, but only logged. Usually these can only be transient errors, as static communication problems are caught before the upload. B2582: Crash on install. Installer can crash while testing printers if certain inoperative network printers exist on a system. B2577: Lost the manual upload fallback. For most upload failures we lost the message to the user to upload the file manually. B2568: handle multiple users and multiple packages on a server system (continuation of B#2462). SwiftPublish can now finally handle simultaneous package processing. Various problems have been fixed: - Package program interruption (e.g. ^C to sptest) can leave an orphaned, template-less printer; don't let a new package trip over it. - Key enumeration would fail if a key was deleted/added while enumerating. Many failure modes, e.g. two packages using the same ID. - Remove abandoned ,NNN printer reg keys generated by Windows on printer delete. They will eventually fill up the registry (around 700 packages is enough to cause a 64M win2k system to fail.) - Avoid deadlock in DEBUG build: don't test a printer while holding a mutex. B2563: driver type-dependent features broken (driver selection, descrambling). Release build got wrong print driver type from cache. (Debug build is OK.) Causes the following problems: - Second-time installation won't use existing printers. - Color and drivertype attributes for upload page are set incorrectly in packages. - Descrambling is disabled. B2557: SwiftPublish GUI crashes on invalid install time in eval install. The GUI would exception if the install time saved in the registry was invalid. B2556: Problems in 9x port capture: Some hangs were still occuring. Prevent possible collisions between multiple DOS boxes writing to lpt port. Don't allocate memory until in use. B2551: Smart Quotes still may produce rubout characters. Sometimes Word Smart Quotes still mess up descrambling, and therefore are displayed as rubout characters in SwiftView. Don't output descrambling characters for rasterized text that can't be descrambled with this design. B2534: Error messages when printing to real printers if we use their driver. 2.3 SwiftPublish will produce a slew of error messages "Invalid parameter passed to language monitor" if it uses a driver that has no language monitor and the user prints to the regular printer that uses that driver. Many drivers are in this category (but not the lj4 or lj5), so this must be fixed to use the user's driver. B2509: Changing Base Printer Name breaks that printer. When a Base Printer name is changed and the sender tries to use that printer, an error pops up e.g. saying "Internal error, SwiftSend web site is missing in printer registry key; please reinstall SwiftView." For 2.3: B2531: Package dialogs appear on Terminal Server/Citrix console instead of user session. All message boxes and other dialogs (such as the save-to-file dialog) from package uploads on Terminal Server/Citrix display on the TS/Citrix console. See also B#2512, which is not fixed in 2.3. B2529: SwiftPublish will hang on install if a printer is offline. All apps will hang when printing to file if a printer is set to "use printer offline". Affects SwiftPublish test printing on install and SwiftView printing (B#2530). B2525: possible spooler or package builder crash. handle leak on CreateProcess() could eventually cause spooler or SwiftPack API caller crashes. Same as SwiftView B#2363. B2502: GUI not restoring persistence of existing port mappings. The Spack GUI saves and restores existing mappings of ports to network resources when capturing lpt ports, but any persistence of the existing mapping is lost - the map will not be restored on reboot unless the domain server is restoring it. B2501: Insure that reinstall gets new driver configuration. Reinstalling SwiftPublish with a different driver selection may fail to reconfigure reinstalled printers to use the new driver. This happens with complete (exe) installers and web installs. (It's not supposed to reconfigure printers that are not reinstalled.) B2499: Support HPGL, send file type+info to server. Configure append-to-package file types. Send the correct MIME type on upload to the server; formerly hard-coded to "application/vnd.Swiftview-ZIP". Also separately send to server whether pcl data is 5 or 6, and whether the data is likely to contain color (i.e. the driver is configured to produce color data). B2486: old package printers recreated on NT reboot. Every time a package is renamed on NT, a printer of the old name will be recreated when the system is rebooted or the spooler is restarted. B2483: cancelling login dialog on package causes problems. If you cancel the login dialog on a package, then print from an app, the package is destroyed and must be discarded. If you use the Add File button, the operation is prevented, but no damage can be done. Problems may also be possible if you print to a package after closing, but that's hard to do. Allow adding files after a cancel, but not after close. B2477: Installer failed silently on systems with incorrect registry permissions. NT+ systems can be reconfigured with no permissions for Administrators to write portions of the registry that must be writable to install a printer. SwiftPublish would install without errors, but not function; e.g. nothing would happen when printing to a SwiftPublish printer. B2474: SwiftPublish installs in sview LAN dir. If SwiftView is LAN-installed, SwiftPublish LAN-installs too, and at least the uninstall from Add/Remove programs may fail with a permission error, trying to run the uninstaller from the LAN directory - or maybe delete files from the LAN dir. Always install in the standard SwiftView program dir. B2473: Recover from crashes. Various crashes including test prints, spooler calls, and our monitor running in the system spooler spool32.exe are now caught, producing a message box to the user and aborting the operation. It should be no longer possible for SwiftPublish to crash the spooler! Also catches test print crashes in SwiftView. B2463: crashes/hangs on win98se, on AddMonitor. There is a rare crash in the installer call to AddMonitor() of our monitor on win98se, seen here a couple of times and by a couple of customers. B2431: using certain non-alphanumerics in username/password makes sign-in fail. SwiftPublish fails to sign in if the password contains any of the following characters: "$-_.+!*'(),;/?:@=&". Also, these characters were lost from the job title. B2365: descrambling bashes Word 'Smart Quotes'. win2k/XP text descrambling caused "block" (XP) or blank (2K) characters to be rendered for Word "Smart Quotes" characters. Despite fixing this, due to other restrictions, descrambling is still not recommended for general use. B2353: Install over 2.1 or less can fail due to old dlls left around. If an old swiftu.dll is left under spooldrivers..., it apparently may get loaded instead of the new one in the system dir. I think this explains the msmatch problem fiserv had with a 2.2.1 install over old 2.0.4. New installer deletes old files in w32x86* that we still use. THIS MEANS THAT WE CANNOT FORCE-UPGRADE TO V2.2.x! B2352: SwiftPublish installer could fail in the presence of old drivers. The 8100 pcl6 installer on NT failed, silently, when there was an old version of the monitor dll in the system directory. B2339: Save to file to a network filesystem fails on NT+. At 2.2, save to file to a network filesystem from anything but syncronous package upload stopped working on NT+. We get the message "system error 86: The specified network password is incorrect". It still fails on mounted drives if you login as a domain user, see Known Problems. B1576: SwiftPublish and SwiftView sometimes were not able to determine the driver type of a Novell network printer. This caused install delays in SwiftPublish, and refusal to use the existing driver. B1344: 'website is not licensed for SwiftPublish' error dialog needs changing. Error dialog needs changing: from "website is not licensed for SwiftPublish" to something more open, for example, "SwiftPublish has not received a license from the site. This may be due to the site not being licensed, to the license not being transmitted through the Internet to this computer, or to this browser not relaying the license to SwiftPublish." For 2.2.1: Small plain text packages < 2048 bytes total were misrecognized as HPGL and not displayed by SwiftView. The uninstaller could crash if it needed to schedule files for removal on reboot. On a win9x reinstall that requires a reboot, occasionally the installer failed to reinstall the printer correctly. Windows complained that the driver was bad and tmporarily reset it. To repair, you had to delete the SwiftPublish printer and reinstall SwiftPublish. On some win9x systems, even if a reboot was not requested, SwiftPublish might not have worked until a reboot. A reboot is now always requested. If a printer permanently mapped to an LPT port was removed while a package was in existence, the package builder gui got an error every time it was started. Now the gui will only error once, but the package may get mapped permanently to the LPT port (this also can happen if a permanent mapping is added while a package is active). This bogus package mapping can be removed manually: type e.g. "net use lpt1 /delete" in a DOS box, while a package does not exist. "Capture output to LPT printer ports" would not take effect if the port was redirected to a network printer, instead of having a local Windows printer driver that outputs PCL. In 2.2.0, this could be remedied by creating a local Windows printer on that port with a PCL printer driver, e.g. "HP LaserJet 4). Creating this printer will not affect redirection of the port to the network printer. In 2.2.1+, we capture if either a local or a network printer is PCL. For 2.2: Installer would crash when run as non-admin user. Installs on Terminal Server on 2k+ would fail. Message boxes (e.g. errors) displayed on the desktop of the first user logged into XP; many, but not all, now display correctly. The Package Builder item count was not updated immediately when an application added an item to the package. Clicking anything (any action that restores focus to the gui) will now update it. Uploading from win98 systems at certain sites could fail some or all of the time, either reporting a wininet error 12004 (ERROR_INTERNET_INTERNAL_ERROR), or failing silently. On NT, uploading through a proxy server could fail if printing to a base Publish printer, likely reporting wininet error 12029. Packages also could fail if SPackClose() was called with the sync parameter = false. Packages created through the GUI were not a problem, but to prevent it, they were being uploaded syncronously on NT (locking out the package builder GUI until the upload is complete). With this fix, packages on NT are now uploaded in the background on all platforms, immediately freeing up the GUI for further work. SwiftPublish could cause a blue-screen crash of XP. Proxy settings on IE 6.0 on NT/XP did not behave cleanly. Proxy settings in IE run under the user login appeared to affect uploads, but did not affect spooler-started IE settings. Also, if a proxy is configured under the user account, but with "use a proxy server" unchecked, base printing uploads may use the proxy server. B1390: Automatic updates of the SwiftPublish software could fail when printing to a base printer, and were never initiated when uploading a package. Now, if the user does not have admin privileges, instead of running the browser we simply inform them that a new version is available at the Upgrade URL. On NT, win2k, or XP, if you logged into an account without administrator privileges, you could not use the SwiftPublish Package Builder. Sometimes when the login dialog was displayed on NT/w2k, it did not have keyboard focus. Packages may fail with an "invalid ticket" error after printing to the base printer if an older version is reinstalled over 2.2. Sometimes the document title/subject was not initially set in the disposition page when printing to a base printer on win2k. Various dialogs could start hidden behind other windows, especially on 2K/XP. The Package Builder could fail to restore the default printer. Switching base printers in the Package Builder on w2k/XP failed to copy the device mode (e.g. resolution.) Packages were trashed on syncronous upload errors, e.g. no license, and the GUI was stuck in an inescapable state. On a new install on win98, a reboot is required to insure that print jobs sent to SwiftPublish are not lost. On an install on win95, possibly others, printers might not be created if a reboot is required. If you tried to finish a package before a file add operation completes spooling the data, you could get the error "Unable to send the package: got an error reading the file ..." A retry after printing is done succeeded. Also, many empty files got left behind. Citrix servers have a printer to printer map (to map troublesome printers to ones they know will work). Our SwiftPublish driver on NT was named (e.g. on nt) "SP LaserJet III", is not in the list and therefore is not recognized and client SwiftPublish printers are not mapped into the client session. Allow up to 80-character username&password as allowed in SwiftSend. Windows XP did not allow writing c:\ by default, and all NT+ can be configured this way, so the c:\sp.zhp fallback file would fail, and log files could not be written. Log files and sp.zhp are now saved in c:\Program Files\SwiftView\temp. Registry LogPath is no longer used; the log filename is wired to swiftpublish.log. (B1443) Packages output from Contour could get a bogus extra page inserted that displays e.g. "PJL SET RESOLUTION=300". The start menu shortcut for the Package Builder was not created for all users, only the installing user, and could fail to be created on win98. The Package Builder GUI would try to proceed with upload with a garbage ticket if the gui was closed while the login dialog was up. On output to file, requery the user for the filename if the file can't be written. SPackListActive() could incorrectly find a finished package, but not bring up it's attributes. Make sure it ignores finished packages. Installer may hang on a system with a hung or free-running process. Installer may fail if it follows a deinstall that scheduled a file for removal on reboot. Printer installer may fail if driver installer had to schedule file installation on reboot. Installer may fail to request a reboot on NT when a file is in use, or when spack.dll or spzip.dll is in use on any platform. Uninstaller was not deleting all files, or removing the Add/Remove programs entry or GUI shortcut starting with v2.1. It also now sets a flag when it schedules files for delete on reboot, telling the installer to request a reboot and abort. Logging can now be turned off in debug build. On ME, if you delete all SwiftPublish printers by hand from the print manager, and say yes to "delete no-longer-used files", a printer reinstall fails. Not a problem if you delete via Add/Remove software. Sometimes to-file (OutputFileOnly) printer is not prompting for a filename: If you have previously set Filename and FilenameEnabled, just popping the options dialog overrides the package settings, adding a Filename. The GUI now leaves both "Save to file:" and "SwiftSend to:" disabled (unchecked) if there is no Filename or FilenameEnabled. Options dialog tab stops, item alignment fixed. SwiftPack API Changes and Fixes For 2.3.1: Better syncronization. SPackBusy now checks for locked temp file, so a locked temp file is checked by SPackWrite and SpackAddFile. Recommend more retries for large jobs. For 2.3: SPackAddFile now copies files directly to packages only for configured types and suffixes (i.e. supports hpgl drivers.) Configurable file type information reported to server. UserName attribute, for managing per-user packges. Better syncronization return codes. For 2.2: License strings passed to SPackSetLicense stopped working at v2.1; now they work correctly. SPackIsLicensed now returns whether it has a timebomb or real license. It is no longer necessary to enter two license strings in the registry, by entering the standard license in the GUI or manually entering two strings in the registry, to publish to a base printer - the standard license can be passed to SPackSetLicense(). Specification Details This section collects some notes on the details of SwiftPublish operation. Printer and Driver Matching Prior to release 2.2: SwiftPublish attempts to configure it's driver to match an existing PCL driver, if any. During install, we find a PCL printer in the following manner: First, we try to open the default printer. If it is PCL this is the printer we try to match to. If we cannot find a default PCL printer, we search for the first PCL printer we can find in the system and match to it. For windows 9x/ME/NT, if this printer's driver is not in the list of PCL drivers we can match to, no matching is done, and we simply install our LaserJet III driver on NT, or our LaserJet 4 driver on all other platforms. Our drivers have their names changed from "HP LaserJet" to "SP LaserJet", as they are modified from the standard drivers. Otherwise we install the version of our driver that matches the existing PCL driver, including it's margins. This also gives us a matching private DevMode, which includes other info private to that specific instance of the printer driver. On Windows 2000, we can match any version 3 PCL unidriver-based driver (most drivers). On 9x/ME, we can match the following PCL drivers: HP LaserJet III HP LaserJet IIIP HP LaserJet IIID HP LaserJet IIISi HP LaserJet 4L HP LaserJet 4ML HP LaserJet 4 HP LaserJet 4M HP LaserJet 4Si HP LaserJet 4Si MX HP LaserJet 4 Plus HP LaserJet 4V HP LaserJet 4MV HP LaserJet 4M Plus HP LaserJet 4P HP LaserJet 4MP HP LaserJet 5P HP LaserJet 5MP HP PaintJet XL 300 HP LaserJet 2100 Only the first four drivers in this list are matched on NT, because we have definitions only for these four drivers on NT. Once we have found a printer we can match, and loaded the correct driver for it, we complete matching by doing the following: - Copy from the default printer's current DeviceMode structure to our driver's DeviceMode structure (in the registry): - Page Orientation - Paper Size - Paper Length - Paper Width - Scaling - Copies to print - Default paper source - Print Quality - Color options (B/W only option availible though because our match list does not include color) - Duplex Options - TrueType options - Collate options - Horizontal and Vertical DPI - The printers Pel's Height/Width - Its display flags - Its display frequency. - If we have specified a Resolution in our setup configuration, the printer is set to that DPI value. Resolution is limited to 75, 150, and 300 on NT, plus 600 on all other platforms. Printer matching is complete at this point. If the user subsequently changes his default printer we do not match this new default printer. Upon reinstallation, we will re-match to the default PCL printer if possible. Beginning with release 2.2: SwiftPublish now uses the best available existing printer driver that has been determined to be usable. If the default printer's driver meets the following requirements, configured by ini/reg settings, it is installed silently: - the driver is one of the "AllowedDriverTypes". This is normally PCL5, but PCL6, PCL_COLOR, PCL3, HPGL, TIFF, POSTSCRIPT, and PDF can also be included, but only PCL5 and PCL6 have been tested or have installable drivers available. - the driver is not in "BadDrivers" or "IgnoredDrivers", - if "TestedDrivers" is not empty, the driver is in that list, - and on win2k/XP, either Descrambling is disabled in the registry, or SwiftPublish can descramble the driver's text. Otherwise, if only one such driver is found on any printer, it is installed silently. Otherwise, the "PreferredDriver" (normally HP LaserJet 4) is used. If WarnNoMatch is true, the following message box is displayed: SwiftPublish cannot use the printer driver for the printer, and could not find exactly one suitable driver to use. We will now [download if necessary, ]install, and use the driver. Because of this, SwiftPublished documents may not exactly match output from your actual default printer. If you have a %s-compatible printer and want an exact match, you will need to change your default printer to a different %s driver that is compatible with SwiftPublish, and reinstall SwiftPublish. [The following drivers are compatible: ] [The following drivers are not compatible: ]. The current standard installer has TestedDrivers=HP LaserJet 4, so consequently will not use other drivers, and the printer generally will not be matched. Note also that SwiftPublish no longer matches private DEVMODE settings, as it did prior to version 2.2 - this will be corrected in a subsequent release for the case that we use an existing driver. If the preferred driver files are in the installer (or if on 2K+, where the file come from the OS) it is always installed and hooked, even if it is not used. This allows manual switching to the preferred driver after installation. If the driver's files are not in the installer, they are downloaded incrementally, from a URL configured in the svdll.dat file. If a Resolution is set in the printer installer, that resolution is set in the driver if the driver is capable of that resolution. Otherwise, we copy the Resolution from the printer whose driver was used, or use the driver default when using the PreferredDriver (e.g. 600 dpi for HP LaserJet 4). Other printer settings are copied from the printer whose driver was used, including: - Page Orientation - Paper Size - Paper Length - Paper Width - Form name (e.g. letter) - Scaling - Copies to print - Default paper source - Print Quality - Duplex Options - TrueType options - Collate options - Horizontal and Vertical DPI - Height and Width in pixels - Color type, bits per pixel - Display flags - Display frequency If the user subsequently changes his default printer in any way, we do not match the new driver or settings. When a printer is reinstalled, or when a printer is upgraded from an obsolete pre-2.2 SwiftPublish driver, we will repeat the driver selection and matching process. Otherwise existing SwiftPublish printers are not changed - this allows installing multiple printers from different web sites with independent driver selection. (Note: if the printer installer runs before the driver installer, it will use the existing driver selection from a prior SwiftPublish install; a subsequent reinstall will get the new driver selection. This is particularly a problem with split web page installs; this case is fixed in 2.3: driver installer resets printers created less than 30 seconds ago.) Package printers copy the driver and settings of the base printer when they are created, and reset them to match the new base printer when the base printer is reselected (incomplete until release 2.3). Note: changing a SwiftPublish printer to another driver in the Windows printer property dialog will lose the printer settings copied from the user's actual printer. Therefore, except for installs that use the PreferredDriver, if the user wants to change drivers they should set the default printer to a printer that uses that driver and reinstall SwiftPublish. Also, prior to release 2.3, they should uninstall SwiftPublish first, due to a bug that the previously saved default driver devmode isn't discarded when a new driver is selected by the installer (B2501). Beginning with release 2.3: The default printer's driver must meet the following requirements to be used by SwiftPublish, if configured by ini settings: - supports duplexing - supports mixed letter and legal page sizes - supports the DPI setting in the ini file, if any (only 600 is supported) All printer properties are now copied from the printer whose driver is used if any (usually the default printer). This includes any per-user settings for all users on the system (Windows keeps user devmode settings on a per-user basis; they are visible in the printer properties General...Printing Preferences dialog.) Previously, only the most basic devmode settings were copied, and only global settings. Note that the settings from the the reference printer are saved in the registry when the main SP install runs and selects the driver, then are copied to the SwiftPublish printer when the printer installer component runs. One thing we aren't copying is spooler settings, such as "Print spooled documents first", since they really don't matter to SwiftPublish. The Resolution install parameter (Force the SwiftPublish default resolution) is no longer supported.