diff --git a/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj b/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj
index a5d82e34d..60de4fd1c 100644
--- a/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj
+++ b/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj
@@ -14,7 +14,6 @@
-
DefaultTerminal.idl
@@ -85,7 +84,6 @@
-
DefaultTerminal.idl
@@ -267,4 +265,4 @@
-
\ No newline at end of file
+
diff --git a/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj.filters b/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj.filters
index 873dcb28c..a99f5e654 100644
--- a/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj.filters
+++ b/src/cascadia/TerminalSettingsModel/Microsoft.Terminal.Settings.ModelLib.vcxproj.filters
@@ -46,9 +46,6 @@
profileGeneration
-
- profileGeneration
-
@@ -95,9 +92,6 @@
profileGeneration
-
- profileGeneration
-
@@ -129,4 +123,4 @@
{81a6314f-aa5b-4533-a499-13bc3a5c4af0}
-
\ No newline at end of file
+
diff --git a/src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.cpp b/src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.cpp
deleted file mode 100644
index 633e5b94c..000000000
--- a/src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT license.
-
-#include "pch.h"
-#include "DynamicProfileUtils.h"
-#include "VcDevCmdGenerator.h"
-
-using namespace winrt::Microsoft::Terminal::Settings::Model;
-
-void VcDevCmdGenerator::GenerateProfiles(const VsSetupConfiguration::VsSetupInstance& instance, bool hidden, std::vector>& profiles) const
-{
- try
- {
- const std::filesystem::path root{ GetVcCmdScriptDirectory(instance) };
- if (!std::filesystem::exists(root))
- {
- return;
- }
-
-// x64 environments only installed on 64-bit machines.
-#ifdef _WIN64
- const auto vcvars64 = root / L"vcvars64.bat";
- if (std::filesystem::exists(vcvars64))
- {
- auto profile = CreateProfile(instance, L"x64", vcvars64, hidden);
- profiles.emplace_back(std::move(profile));
-
- // Only the VC environment for the matching architecture should be shown by default.
- hidden = true;
- }
-
- const auto vcvarsamd64_x86 = root / L"vcvarsamd64_x86.bat";
- if (std::filesystem::exists(vcvarsamd64_x86))
- {
- auto profile = CreateProfile(instance, L"x64_x86", vcvarsamd64_x86, true);
- profiles.emplace_back(std::move(profile));
- }
-
- const auto vcvarsx86_amd64 = root / L"vcvarsx86_amd64.bat";
- if (std::filesystem::exists(vcvarsx86_amd64))
- {
- auto profile = CreateProfile(instance, L"x86_x64", vcvarsx86_amd64, true);
- profiles.emplace_back(std::move(profile));
- }
-#endif // _WIN64
-
- const auto vcvars32 = root / L"vcvars32.bat";
- if (std::filesystem::exists(vcvars32))
- {
- auto profile = CreateProfile(instance, L"x86", vcvars32, hidden);
- profiles.emplace_back(std::move(profile));
- }
- }
- CATCH_LOG();
-}
-
-winrt::com_ptr VcDevCmdGenerator::CreateProfile(const VsSetupConfiguration::VsSetupInstance& instance, const std::wstring_view& prefix, const std::filesystem::path& path, bool hidden) const
-{
- const auto seed = GetProfileGuidSeed(instance, path);
- const winrt::guid profileGuid{ ::Microsoft::Console::Utils::CreateV5Uuid(TERMINAL_PROFILE_NAMESPACE_GUID, gsl::as_bytes(gsl::make_span(seed))) };
-
- auto profile = winrt::make_self(profileGuid);
- profile->Name(winrt::hstring{ GetProfileName(instance, prefix) });
- profile->Commandline(winrt::hstring{ GetProfileCommandLine(path) });
- profile->StartingDirectory(winrt::hstring{ instance.GetInstallationPath() });
- profile->Icon(winrt::hstring{ GetProfileIconPath() });
- profile->Hidden(hidden);
-
- return profile;
-}
-
-std::wstring VcDevCmdGenerator::GetProfileGuidSeed(const VsSetupConfiguration::VsSetupInstance& instance, const std::filesystem::path& path) const
-{
- return L"VsDevCmd" + instance.GetInstanceId() + path.native();
-}
-
-std::wstring VcDevCmdGenerator::GetProfileName(const VsSetupConfiguration::VsSetupInstance& instance, const std::wstring_view& prefix) const
-{
- std::wstring name{ prefix + L" Native Tools Command Prompt for VS " };
- name.append(instance.GetProfileNameSuffix());
- return name;
-}
-
-std::wstring VcDevCmdGenerator::GetProfileCommandLine(const std::filesystem::path& path) const
-{
- std::wstring commandLine{ L"cmd.exe /k \"" + path.native() + L"\"" };
-
- return commandLine;
-}
-
-std::wstring VcDevCmdGenerator::GetVcCmdScriptDirectory(const VsSetupConfiguration::VsSetupInstance& instance) const
-{
- return instance.ResolvePath(L"VC\\Auxiliary\\Build\\");
-}
diff --git a/src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.h b/src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.h
deleted file mode 100644
index 8e30cf28b..000000000
--- a/src/cascadia/TerminalSettingsModel/VcDevCmdGenerator.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*++
-Copyright (c) Microsoft Corporation
-Licensed under the MIT license.
-
-Module Name:
-- VcDevCmdGenerator
-
-Abstract:
-- Dynamic profile generator for Visual C++ development environments.
-
-Author(s):
-- Heath Stewart - September 2021
-
---*/
-
-#pragma once
-#include "VisualStudioGenerator.h"
-#include "VsSetupConfiguration.h"
-
-namespace winrt::Microsoft::Terminal::Settings::Model
-{
- class VcDevCmdGenerator final : public VisualStudioGenerator::IVisualStudioProfileGenerator
- {
- public:
- void GenerateProfiles(const VsSetupConfiguration::VsSetupInstance& instance, bool hidden, std::vector>& profiles) const override;
-
- private:
- winrt::com_ptr CreateProfile(const VsSetupConfiguration::VsSetupInstance& instance, const std::wstring_view& prefix, const std::filesystem::path& path, bool hidden) const;
-
- std::wstring GetProfileIconPath() const
- {
- return L"ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png";
- }
-
- std::wstring GetProfileGuidSeed(const VsSetupConfiguration::VsSetupInstance& instance, const std::filesystem::path& path) const;
- std::wstring GetProfileName(const VsSetupConfiguration::VsSetupInstance& instance, const std::wstring_view& prefix) const;
- std::wstring GetProfileCommandLine(const std::filesystem::path& path) const;
- std::wstring GetVcCmdScriptDirectory(const VsSetupConfiguration::VsSetupInstance& instance) const;
- };
-};
diff --git a/src/cascadia/TerminalSettingsModel/VisualStudioGenerator.cpp b/src/cascadia/TerminalSettingsModel/VisualStudioGenerator.cpp
index 9e883205e..2c1069b3f 100644
--- a/src/cascadia/TerminalSettingsModel/VisualStudioGenerator.cpp
+++ b/src/cascadia/TerminalSettingsModel/VisualStudioGenerator.cpp
@@ -4,7 +4,6 @@
#include "pch.h"
#include "DynamicProfileUtils.h"
#include "VisualStudioGenerator.h"
-#include "VcDevCmdGenerator.h"
#include "VsDevCmdGenerator.h"
#include "VsDevShellGenerator.h"
@@ -20,7 +19,6 @@ void VisualStudioGenerator::GenerateProfiles(std::vector VsSetupConfiguration::QueryIn
wil::com_ptr e;
THROW_IF_FAILED(pQuery->EnumInstances(&e));
- ComPtrSetupInstance rgpInstance;
- auto result = e->Next(1, &rgpInstance, nullptr);
- while (S_OK == result)
+ for (ComPtrSetupInstance rgpInstance; S_OK == THROW_IF_FAILED(e->Next(1, &rgpInstance, nullptr));)
{
- // wrap the COM pointers in a friendly interface
- instances.emplace_back(VsSetupInstance{ pQuery, rgpInstance });
- result = e->Next(1, &rgpInstance, nullptr);
+ instances.emplace_back(pQuery, std::move(rgpInstance));
}
- THROW_IF_FAILED(result);
-
// Sort instances based on version and install date from latest to oldest.
std::sort(instances.begin(), instances.end(), [](const VsSetupInstance& a, const VsSetupInstance& b) {
auto const aVersion = a.GetComparableVersion();
@@ -123,7 +117,7 @@ std::wstring VsSetupConfiguration::GetStringProperty(ISetupPropertyStore* pProps
}
wil::unique_variant var;
- if (FAILED(pProps->GetValue(name.data(), &var)))
+ if (FAILED(pProps->GetValue(name.data(), &var)) || var.vt != VT_BSTR)
{
return std::wstring{};
}
diff --git a/src/cascadia/TerminalSettingsModel/VsSetupConfiguration.h b/src/cascadia/TerminalSettingsModel/VsSetupConfiguration.h
index f3a318af0..77866de04 100644
--- a/src/cascadia/TerminalSettingsModel/VsSetupConfiguration.h
+++ b/src/cascadia/TerminalSettingsModel/VsSetupConfiguration.h
@@ -56,12 +56,12 @@ namespace winrt::Microsoft::Terminal::Settings::Model
return VsSetupConfiguration::GetInstallationVersion(inst.get());
}
- unsigned long long GetComparableInstallDate() const
+ unsigned long long GetComparableInstallDate() const noexcept
{
return installDate;
}
- unsigned long long GetComparableVersion() const
+ unsigned long long GetComparableVersion() const noexcept
{
return version;
}
@@ -114,9 +114,6 @@ namespace winrt::Microsoft::Terminal::Settings::Model
return profileNameSuffix;
}
- private:
- friend class VsSetupConfiguration;
-
VsSetupInstance(ComPtrSetupQuery pQuery, ComPtrSetupInstance pInstance) :
query(pQuery), // Copy and AddRef the query object.
inst(std::move(pInstance)), // Take ownership of the instance object.
@@ -126,6 +123,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model
{
}
+ private:
ComPtrSetupQuery query;
ComPtrSetupInstance inst;