2016-10-06 29 views
1

如何在Windows 10上從Inno Setup安裝程序打開PDF?我試圖顯示幫助文檔,並且我使用的技術(based on comments on this question)和適用於Windows 7的技術在Windows 10上運行時不會發生任何事情(文件未打開,並且沒有報告錯誤消息)。如何在Windows 10上使用Inno Setup打開PDF?

具體地,試圖打開PDF(在安裝在使用ShellExec()或安裝在使用shellexec標誌[Run]部之後的自定義代碼部分之前)在需要提升的權限的安裝程序,這將產卵2個的Adobe過程時,但不會打開窗口(此外,除非手動終止這些進程,否則無法打開其他PDF。但是,如果PDF將打開:

  1. 另一個PDF已經打開,
  2. 安裝程序從已提升的命令提示符下啓動,或
  3. 安裝程序從Inno Setup的工作室lanuched

在所有其他情況下,PDF將不會啓動(並且直到您終止2個Adobe進程,則不會打開其他PDF)。

這實質上是在Windows 7,但不能在Windows 10的工作代碼:

ExtractTemporaryFile('test.pdf'); 
ShellExec('open', 
    AddQuotes(ExpandConstant('{tmp}\test.pdf')), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); 
+1

當作爲管理員運行時,有可能沒有爲動詞** open **註冊shell命令。你是否嘗試通過''''而不是打開? (這也可以解釋爲什麼'ShellExecAsOriginalUser'在ShellExec不適用的情況下工作 - 非管理員爲PDF文件分配了開放動詞操作。)較新的Acrobat Reader版本的默認值是* Read *,而不是* Open *,使用空字符串將導致它使用默認操作。 –

+0

沒有運氣,將''''傳遞給'ShellExec'具有相同的結果。但是,很高興知道_read_是新的默認操作,謝謝。 – dbc

回答

1

我懷疑的東西是怎麼回事權限,由於結果是不同,這取決於安裝程序是如何啓動(例如,從已經升高的過程與開始後的升高)。

使用ShellExecAsOriginalUser的作品。例如: -

ExtractTemporaryFile('test.pdf'); 
ShellExecAsOriginalUser('open', 
    AddQuotes(ExpandConstant('{tmp}\test.pdf')), '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); 

我不知道這是否是一個錯誤或預期的功能,ShellExec不能在Windows 10達到這個目的和ShellExecAsOriginalUser一樣。

+1

無論如何,你應該從一開始就使用'ShellExecAsOriginalUser'。除非應用程序需要,否則您不想使用提升的權限運行任何應用程序。而PDF查看器不。 –