Bookshelf 7.1.2

email me

The Bookshelf Application


When trying to package…


Locate the MSI in the %TEMP%, once you launch the EXE

setup.msi /qn /norestart

Or, just use the EXE

setup.exe /v”/qn”

You will run into a snag with the application eula; not the setup eula, but the actual application eula. The settings are stored in the user profile.

Even if you run the setup silently, this happens upon app launch:

App Eula (you don’t want to see this)

This setting, along with several others, are stored in the BookShelf Prefs file.

BookShelf Prefs

I captured the Bookmark Prefs from a reference machine and added it to a compiled package. I used this script I created a while back to actually copy the file to each user profile:

on error resume next

Set objShell = CreateObject("Wscript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")

Const HKEY_LOCAL_MACHINE = &H80000002
Const OverwriteExisting = TRUE
Const POPUP_TITLE = "User To SID Conversion"
'SETS CURRENT DIRECTORY TO VARIABLE
strCurrentDirectory = objShell.CurrentDirectory
strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objRegistry=GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")
strKeyPath = "SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\ProfileList"
objRegistry.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubkeys
For Each objSubkey In arrSubkeys
on error resume next
strValueName = "ProfileImagePath"
strSubPath = strKeyPath & "\" & objSubkey
objRegistry.GetExpandedStringValue HKEY_LOCAL_MACHINE,strSubPath,strValueName,strValue

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objAccount = objWMIService.Get("Win32_SID.SID='" & objSubkey & "'")
strUser = objAccount.AccountName
'strDomain = objAccount.ReferencedDomainName'returns referenced domain

'DISPLAY PROFILE NAME & SID
objSubkey = trim(objSubkey)'trims whitespace
strUser = trim(strUser)'trims whitespace
'msgbox "objSubkey: " & objSubkey'returns SID
'msgbox strUser'returns username

'LOGIC TO DETERMINE IF REGISTRY ACCOUNT IS TO BE LOADED
if strUser = "SYSTEM" then strUser=""
if strUser = "LOCAL SERVICE" then strUser=""
if strUser = "NETWORK SERVICE" then strUser=""
'if strUser = "ADMINISTRATOR" then strUser=""
if strUser <> "" then
on error resume next
Wscript.Sleep 1000

target = "C:\Users\" & strUser & "\Documents\My Books\VitalSource Bookshelf\User Data\"

'Copy file
If (objFSO.FileExists(strCurrentDirectory & "\Bookshelf Prefs")) Then
objShell.Run "%comspec% /c copy /y " & chr(34) & strCurrentDirectory & "\Bookshelf Prefs" & chr(34) & " " & chr(34) & target & chr(34),0,true
end if

end if

Next