我有一个MSI及其对话框,提示用户[1]浏览安装目录,[2]接受EULA,[3]安装完成后启动应用程序.
我将MSI包装在Burn Bundle中以制作EXE.现在我所看到的只是EXE对EULA的提示,但没有提示选择安装目录,或启动应用程序.
我想使用EXE格式,因为客户了解它,我可以关联我的图标并在EXE中嵌入我的版本号,并提示输入管理员密码.客户将我的软件下载为单个可执行文件.
这是代码:
<WixVariable Id="WixStdbaLogo" Value="MyIcon.ico" />
<Variable Name="InstallFolder" Type="string" Value="[ProgramFilesFolder]MyCompany\MyProduct"/>
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<WixVariable Id="WixStdbaLicenseRtf" Value="MyLicense.rtf" />
<Chain>
<MsiPackage
Id="Setup"
Compressed="yes"
SourceFile="MyProduct.msi"
Vital="yes"
DisplayInternalUI="yes"
EnableFeatureSelection="yes"
>
<MsiProperty Name="INSTALLLOCATION" Value="[InstallFolder]" />
</MsiPackage>
</Chain>
Run Code Online (Sandbox Code Playgroud)
该"DisplayInternalUI ="是 "选项,似乎并没有做我想做的.'EnableFeatureSelection’没有什么区别它是否是yes或no.
如何显示MSI对话框?或者,如何让Burn生成的EXE提示安装目录和应用程序启动?
我使用的是WiX 3.7.1224,VS 2010.
我查看了以下来源:
这是MSI(6月30日13:07 AST):
<Product Id="*" Name="My Product" Language="1033" Version="5.0.0"
Manufacturer="My Company" UpgradeCode="0bd6d4cf-d23d-431a-9baf-c72cb0525f0c">
<Package InstallerVersion="200" Compressed="yes" …
Run Code Online (Sandbox Code Playgroud) 我的应用程序是Win32;我正在使用 VS 2015。我有一个包含列表框的对话框。我将列表框设置为动态调整大小,但调整对话框大小时它不会改变。
以下是列表框的属性:
列表框是所有者绘制的:
这是对话框的默认大小:
这就是我在资源研讨会对话框编辑器中以测试模式拉伸时对话框的样子。请注意,内部列表框也展开了,正如所希望的那样:
但是,当它实际运行时,拉伸对话框不会增加列表框的大小:
为什么这不起作用?我是否需要调用一些额外的巫术才能使其真正起作用?这只能在MFC中使用吗?Win32 相当于什么CWnd::ExecuteDlgInit
?
注意:我已经看过https://msdn.microsoft.com/en-us/library/mt270148.aspx和http://mariusbancila.ro/blog/2015/07/27/dynamic-dialog-layout-for -mfc-in-visual-c-2015/,其中我没有找到答案。
我的应用程序需要写入\ ProgramData中可以保护的文件.这只在安装后发生一次.
是否有一个API函数可以获取ACL信息并提示用户授权应用程序访问该文件?换句话说,应用程序会要求Windows提示用户进行确认和授权.这应该以交互方式发生,并允许应用程序在授权访问文件后继续执行.该应用程序以标准用户身份运行,不需要管理员权限.
使用CreateFile()打开该文件.
编辑:我的查询之间存在细微差别,其他人称之为重复.我要求访问一个特定对象,一个文件的权限.其他人要求提升整个过程的特权.无论如何,我感谢所有包含解决方案的回复.
当我使用指向继承类的指针调用基类函数时,为什么会出现编译错误?
例:
class cFoo {};
class cBar : public cFoo {};
void func1(cFoo *) {} // base class
void func2(cFoo **) {} // base class
void main(void)
{ cBar bar, *pbar; // inherited class
func1(&bar); // compiles OK
func2(&pbar); // fail
func2(dynamic_cast<cFoo**>(&pbar)); // 'class cFoo ** ' : invalid target type for dynamic_cast
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我增加了WiX标准对话框中某些字体的大小,现在一些文本溢出或不适合.我可以调整某些控件的大小和位置,而无需编写自定义对话框或搞乱WiX源吗?
这是我天真的尝试:
<Product>
<UIRef Id="WixUI_InstallDir" />
<UI>
<Publish Dialog="InstallDirDlg"
Control="Description"
Property="Height">
30
</Publish>
</UI>
</Product>
Run Code Online (Sandbox Code Playgroud)
当然它不起作用.有什么建议?
尝试在 Win32 应用程序中显示对话框时,出现 RC2247 错误(符号名称太长)。该文件中发生错误:
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\um\winnt.h
Run Code Online (Sandbox Code Playgroud)
这在VS2015下运行得很好。当我升级到VS2017时,错误开始了。
我看过以下帖子,它们似乎不相关,因为它们属于prsht.h
:
RC2247:无法打开 Rc 文件:资源浏览器无法加载资源;加载失败
如果我注释掉整个resource.rc
文件,错误就会消失。如果 RC 包含单行,则会出现错误:
#include <winnt.h>
Run Code Online (Sandbox Code Playgroud)
当我单击“编辑代码”时,没有任何反应。
我很感激任何建议。
我正在与一个公开以下功能的API接口:
IEnumerable<Color?> getColors(long Id);
Run Code Online (Sandbox Code Playgroud)
我调用该函数:
IEnumerable<System.Drawing.Color?> colList = getColors(1);
Run Code Online (Sandbox Code Playgroud)
函数返回时,列表不为null。但是,当我尝试遍历列表时:
foreach (System.Drawing.Color col in colList)
{...}
Run Code Online (Sandbox Code Playgroud)
我什么都没有。没有进入循环。
遍历列表的正确方法是什么?
编辑:我终于想出了如何用这个伏都教得到一个列表计数:
int colCount = colList.Count<System.Drawing.Color?>();
Run Code Online (Sandbox Code Playgroud)
正如建议的那样,该计数确实为零。我现在向API提供者询问为什么这样做?
感谢所有提供正面和建设性建议的人。
winapi ×3
c++ ×2
wix ×2
burn ×1
c# ×1
dynamic-cast ×1
inheritance ×1
modal-dialog ×1
nullable ×1
pointers ×1
resize ×1
uac ×1
windows ×1