2012-06-21 404 views
26

我無法在VS2010中爲Windows服務項目創建安裝項目。它失敗,此錯誤:找不到必需的文件'setup.bin'

Could not find required file 'setup.bin' in 'C:\MyProject\Engine'.

我的環境是Windows 7專業版64位的Visual Studio 2010版本10.0.40219.1 SP1Rel

我已經下載Microsoft Windows SDK for Windows 7 and .NET Framework 4,修復,然後重新啓動,然後安裝除Visual C++編譯器外的未經檢查的組件,然後安裝KB2519277

這些都是現有的註冊表項:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\GenericBootstrapper\3.5 
    Path = c:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bootstrapper\ 

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\GenericBootstrapper\4.0 
    Path = c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\ 

這些都是現有的文件:

C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine\setup.bin 

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Engine\setup.bin 

現有的解決方法是將引擎目錄複製到項目目錄,但是這必須是每次你做一個新項目都會完成。

這怎麼解決?

+1

您是否嘗試將此目錄添加到環境值PATH中? –

+1

@AtillaOzgur剛剛嘗試過,仍然出現錯誤。 – Stijn

回答

22

使用進程監視器我發現,在嘗試訪問路徑之前,使用DLL來檢索此路徑。以下可能是臨界合法的,但我仍然想分享我的發現。

該DLL位於C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll,正在使用的類是Microsoft.Build.Tasks.Deployment.Bootstrapper.BootstrapperBuilder。使用你最喜歡的反彙編工具,你可以發現最終三次嘗試獲取路徑。

  1. HKLM \ SOFTWARE \微軟\ GenericBootstrapper \ 11.0 \路徑
  2. HKLM \ SOFTWARE \ Wow6432Node \微軟\ GenericBootstrapper \ 11.0 \路徑
  3. Environment.CurrentDirectory

我不確定爲什麼它說11.0,據我記得VS 2012之前還沒有安裝在這臺機器上。

因此,在SDK安裝程序中存在一個錯誤,或者DLL中存在一個錯誤。無論哪種方式,創建11.0註冊表項並添加該值可解決此問題。注意:必須重新啓動Visual Studio,因爲嘗試檢索路徑後,它將被緩存。

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GenericBootstrapper\11.0] 
"Path"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Bootstrapper\\" 
Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\GenericBootstrapper\11.0] 
"Path"="C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v7.0A\\Bootstrapper\\" 
+0

我有一個類似的問題,除了我看到與你稍有不同的行爲。我將MSBuild的'ToolsVersion'改爲'4.0',因此:'

+0

也@ ta.speot。是......你怎麼*改變你的MSBuild ToolsVersion?你在編輯什麼文件? – JoelFan

+3

因爲我沒有「SOFTWARE \ Microsoft \ GenericBootstrapper」,我使用了第二個鍵(帶有「Wow6432Node」),我也改變了v7 .0A到v8.1A,因爲我有Visual Studio 2013更新1 – JoelFan

14

之前下降了兔子洞,驗證您需要引導程序。如果您不這樣做,那麼您可以通過執行以下任一操作將其關閉。這也將解決錯誤。

的GUI方式:

  1. 右鍵單擊該項目
  2. 點擊Properties
  3. 點擊左側
  4. Publish選項卡單擊Prerequisites...按鈕
  5. 取消選中Create setup program to install prerequisite components

Project Properties

這個答案來自這個post

的手動編輯csproj文件方式:

  1. 添加<BootstrapperEnabled>false</BootstrapperEnabled>到第一<PropertyGroup>元素
+1

謝謝 - 它也可以通過在csproj –

+0

@rudolf_franek中直接設置 false來完成,在csproj中應該在哪裏添加''元素? –

+0

只需在csproj –

5

的底部我曾與一個TFS同樣的問題建立。

您可以通過設置定義生成的MSBuild的參數在Visual Studio版本解決問題:

/property:VisualStudioVersion=12.0; 

MSBuild arguments in build definition

0

我的解決方案的問題:不能公佈,因爲將setup.bin不能被發現

當在vs2008中使用PUBLISH嚮導時,無法發佈應用程序,因爲找不到setup.bin。


簡短的回答是:

engine文件夾粘貼到被在VS2008 IDE中的ERROR消息所指示的位置。

engine文件夾可以在Microsoft SDKs文件夾中找到。


長的答案是:

在我的情況下,VS2008在C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\一直在尋找的setup.bin。

此位置在vs2008 IDE中的錯誤中指示。

engine文件夾不存在於上述位置,因爲engine文件夾不在那裏。

engine文件夾實際上在C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine

engine文件夾的位置是通過搜索註冊表中的setup.bin

的發生,發現我從Microsoft SDKs文件夾複製engine文件夾並將其粘貼到Microsoft Visual Studio 9.0文件夾。

此文件夾複製解決了問題,並允許我發佈應用程序。

下面是我的具體步驟:

  1. 在註冊表中搜索的setup.bin

  2. 當將setup.bin在註冊表中被發現,檢查重點和注意的文件夾位置將setup.bin(對我來說,這是C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine

  3. 在VS2008 IDE,看在錯誤窗口,並記下的setup.bin錯誤的文件夾位置(在我的情況,這是C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\

  4. VS2008的IDE期待的setup.bin是在C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\engine\,但 這engine文件夾並沒有從C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Engine存在

  5. 複製engine文件夾,並在C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\

  6. 這個文件夾到IDE中粘貼文件夾
1

這是一個多步驟的解決方案。

首先確保您安裝了.Net SDKs。

然後確保以下注冊表項存在: HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\GenericBootstrapper\11.0

它必須包含一個具有價值指向的引導程序的位置的「路徑」條目: C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\

下面的PowerShell腳本這是否對你來說:

$registryPath = "Registry::HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\GenericBootstrapper\11.0" 
$registryValue = "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\" 
function CreateRegistryValues { 

    if(-not (Test-Path $registryPath)) 
    { 
     Push-Location 
     Set-Location -Path Registry::HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\GenericBootstrapper 
     # First add the registry item 
     New-Item -Name '11.0' -Value $registryValue 
     #Then add a property on it for 'Path' and the folder in bootstrapper that contains the 'Engine' folder 
     New-ItemProperty ` 
      -Path $registryPath ` 
      -Name 'Path' ` 
      -PropertyType String ` 
      -Value $registryValue 
     Pop-Location 
    }else{ 
     Write-Warning "You already have the registry key ($registryPath) set. `r`n No action was taken `r`n " 
    } 
} 

最後,你必須複製作爲Visual Studio工具一部分包含的'Engine'文件夾的內容到註冊表值中列出的位置:

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\" 
相關問題