我们在我们编写的 C# dll(程序集 A)中使用 Microsoft 提供的 COM DLL(dsofile.dll)。为了避免必须注册 COM dll,我已将对 dsofile.dll 的引用的isolated 属性切换为 true。
这意味着当我们编译 dll 时,Visual Studio 会将 dsofile.dll、Interop.DSOfile.dll 和 Native 清单文件复制到我们解决方案的 bin 文件夹中,并且应用程序可以在不注册 dsofile.dll 的情况下运行。
这种方法在小型测试应用程序中取得了成功。
然而,在实际应用程序中,程序集 A 被我们的一些其他 dll(程序集 B 和程序集 C)和应用程序 EXE 引用。当本机清单文件和互操作 dll 复制到应用程序的 bin 文件夹时,将使用每个文件的不同副本,因为引用第一个 dll 的每个 dll 都会创建自己的副本。
这会导致文件的多个副本在安装项目中显示为引用(即来自程序集 A、B 和 C 以及 EXE 文件夹的 dsofile.dll,来自程序集 A、B 和 C 以及 EXE 文件夹的 Interop.DSOFile.dll, Native.Assembly A.manifest(来自程序集 A、B 和 C 以及 EXE 文件夹)和编译器警告(“两个或多个对象具有相同的目标位置”)。
此外,如果复制到最终文件夹中的清单和互操作 DLL 不是直接来自 Assembly A 文件夹(因为重复文件相互覆盖),则应用程序无法成功加载 COM DLL。
我被迫从安装依赖项中手动排除文件的重复副本,但在重新加载或重建解决方案时它们会重新出现。
谁能提供更好的方法来实现 COM dll …
我已经构建了一个 Visual Studio (2010) 安装程序安装项目来部署基本的 WinForms 应用程序,并且我需要我的安装程序根据其运行的操作系统创建几个目录。例如,当安装程序在 Windows XP(及更早版本)上运行时,我需要创建:
Application Folder\NewFolder
Run Code Online (Sandbox Code Playgroud)
如果安装程序在 Vista 或更高版本上运行,我需要在通用应用程序数据文件夹(即 C:\ProgramData)下创建目录,如下所示:
Common Application Data Folder\NewFolder
Run Code Online (Sandbox Code Playgroud)
我看到我可以通过“视图”->“文件系统”添加“自定义文件夹”,但我不确定如何声明这个新文件夹的 DefaultLocation 属性。它的默认值为 [TARGETDIR],但我不确定如何指定要创建的目录的位置。这可以通过 Visual Studio 安装程序安装项目来完成吗?还是我运气不好?
我在visual studio 2010中使用了一个安装项目,用于ac#outlook插件(Office 2010/2013)和另一个独立工具.在安装过程中,我终止了所有outlook实例,之后我想重新启动一个outlook实例.
在我的addin项目中,我添加了一个installerclass并添加了一个InstallEventHandler(AfterInstallEventHandler),我在其中执行
Process.Start("Outlook");
Run Code Online (Sandbox Code Playgroud)
虽然相同的命令只是在其他编译的类中打开Outlook,但在安装程序Outlook的上下文中将在概要文件创建助手中打开.
我还尝试在提交后将所述工作编译的exe作为用户定义的操作运行,但同样的问题也会发生.
任何解决方案或解释将不胜感激.
如何延迟 Vb 脚本?以下代码对我不起作用:
wscript.sleep 1000
Run Code Online (Sandbox Code Playgroud)
Delay 10
Sub Delay( seconds )
Dim wshShell, strCmd
Set wshShell = CreateObject( "Wscript.Shell" )
strCmd = "%COMSPEC% /C (PING -n " & ( seconds + 1 ) & " 127.0.0.1 >NUL 2>&1 || PING -n " & seconds & " ::1 >NUL 2>&1)"
wshShell.Run strCmd, 0, 1
Set wshShell = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
dim oshell
set oshell = CreateObject("Wscript.Shell")
obshell.run "%windir%\system32\rundll32.exe kernel32.dll Sleep 5000"
Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2013 项目安装程序扩展。在我的安装程序项目中,我选择使用另一个项目(称为程序项目)的主要输出。PP 是一个控制台应用程序,有一个 app.config,其中包含使用此配置扩展的转换文件。使用各种配置构建 PP 可以正确获取变换值。但是,即使我选择了正确的配置文件来与 PP 的输出一起使用,我的安装程序项目也不会获取正确的转换值。相反,它仅获取 PP 根 app.config 文件中的任何值。

它不是从应用程序获取值。调试.config。它正在使用 app.config 文件。
我不知道是否有推荐的或标准的方法,但我看到了这样的例子:
my-project
package.json
src
index.js
[...]
Run Code Online (Sandbox Code Playgroud)
像这样:
my-project
src
package.json
index.js
[...]
Run Code Online (Sandbox Code Playgroud)
推荐的方法是什么?每种方法有什么优点/缺点吗?
Next 社区,我在使用我也在使用的全新Next.js13配置国际化时遇到问题i18next。
\n我恳请您的帮助,并可能提供一些工作设置的示例。
\n这是我到目前为止所尝试过的\n(我正在使用新的“app”目录)
\n//next-i18next-config.js\n\nmodule.exports = {\n i18n: {\n locales: [\'en\', \'de\'],\n defaultLocale: \'en\',\n },\n}\nRun Code Online (Sandbox Code Playgroud)\n// next.config.js\n\nconst { i18n } = require(\'./next-i18next-config\')\n\nconst nextConfig = {\n reactStrictMode: true,\n swcMinify: true,\n experimental: { appDir: true },\n i18n\n}\n\nmodule.exports = nextConfig\nRun Code Online (Sandbox Code Playgroud)\npublic\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 favicon.ico\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 locales\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 de\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 translation.json\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 en\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 translation.json\n\nRun Code Online (Sandbox Code Playgroud)\n// package.json\n\n"dependencies": {\n "i18next": "^22.0.4",\n "next": "13.0.0",\n "next-i18next": "^12.1.0",\n "react-i18next": "^12.0.0",\n "react": "18.2.0",\n "react-dom": "18.2.0",\n "sass": "^1.56.0",\n "typescript": "4.8.4",\n },\nRun Code Online (Sandbox Code Playgroud)\n服务器端问题 …
我试图使用VS2008创建一个安装项目.
无论如何都要检测是否安装了特定的Office 2010应用程序?
(作为先决条件).eg:我想检测客户端计算机上是否安装了Powerpoint 2010.
我试图在lauch条件下使用Windows安装程序搜索选项,但无法找到
powerpoint 2010的组件ID?
有没有更多的方法来检测相同的?(可以是程序化的)
我的老板需要一个安装程序来将软件安装到我们客户的一台机器上.他希望将软件专门安装到"C:\ Program Files\HisApplicationName"中,而不是"C:\ Program Files(x86)\ HisApplicationName".我知道正确的答案是重写软件以容纳用户选择安装的任何目录,但不幸的是,这是非常旧的软件,需要明天安装,所以我们只想强制安装程序指向客户端"Program Files"目录.
我的问题是,当我将文件路径硬编码到安装程序的"DefaultLocation"属性时,安装程序仍然会尝试指向Program Files(x86)目录.
有没有办法强制Windows安装程序/安装程序包指向程序文件而不是"程序文件(x86)"?
谢谢.
我是MSI的新手.我创建了一个Window的服务,它是我的MSI的输出项目.我的本地机器是64位Win 7机器.我尝试安装的服务器是在VM上运行的Win 2008 32位服务器.我正在使用.NET 4 VS2010.
目前,我的服务的exe正在构建为发布目标= Config Manager中的任何CPU.MSI,没有给我任何改变平台的选择.
我可以在我的本地64位Win7机器上安装没问题.但是,每当我尝试在32位Win 2008上安装时,我都会收到以下错误:"此处理器类型错误不支持此安装包.请与您的产品供应商联系."
我尝试将服务的目标更改为x86重建exe和设置,但我得到了相同的结果.该服务引用了许多类库.我将那些从Any Cpu更改为x86,只是为了看看是否有任何区别.
我还确保将我的安装项目和服务先决条件设置为.NET Framework 4(x86和x64).我还尝试将先决条件Windows Installer从3.1更改为4.5.
似乎没什么用.有任何想法吗?谢谢.
setup-project ×10
c# ×2
app-config ×1
automation ×1
com-interop ×1
conventions ×1
delay ×1
i18next ×1
ms-office ×1
next.js13 ×1
node.js ×1
npm ×1
outlook-2013 ×1
package.json ×1
reactjs ×1
vbscript ×1
wsh ×1