我正在完成一个即将提交用于Windows徽标计划验证的应用程序.其中一个要求是x64兼容性.具体来说,Crystal Reports 2008必须在x64下运行.
我的问题是Crystal Reports basic 2008(与Visual Studio 2008一起打包的版本)没有合并模块,必须使用提供的.msi安装程序进行安装.它们为x86和x64提供单独的安装程序.
那么如何在安装过程中检测x86和x64,然后运行相应的Crystal msi?没有合并模块,这甚至可能吗?
编辑:
这个:
IF PROCESSOR_ARCHITECTURE == x86 AND
PROCESSOR_ARCHITEW6432 NOT DEFINED THEN
// OS is 32bit
ELSE
// OS is 64bit
END IF
Run Code Online (Sandbox Code Playgroud)
似乎告诉我如何检测它(感谢MicSim).但是我如何在MSI中执行此操作?这是一个自定义动作吗?然后,如何为x32和x64晶体报告触发不同的所需msi?
为什么x86水晶安装程序不能在WOW64下工作?您必须安装x64 Crystal才能使用WOW64 x86应用程序.令人沮丧的...
编辑2:
好的,所以检测x86/x64似乎在这里介绍.现在如何手动触发您选择的msi?
我有一个在Linux上以root身份运行的程序,与tty交谈(实际上是一个实现为tty的LCD).值得的设备是/ dev/ttyUSB0.我想让我写入该设备的程序能够独占访问该设备,以免受到同时运行的其他程序实例的干扰.
我看到有一个名为TIOCEXCL的ioctl选项会阻止设备的额外打开,除非发出TIOCEXCL ioctl,否则对同一文件的多次open()调用将成功.这将阻止除root权限进程之外的其他打开. " 我对此进行了测试,它的工作方式与广告一样:如果非root用户尝试打开/ dev/ttyUSB0(一旦我更改了权限),那么打开失败,例如"设备忙",如果root用户尝试打开它, 有用.
理想情况下我想要的是这种独家访问tty以便为root用户工作的方法.所以我有多个root用户使用写入LCD的程序,但不知何故他们对LCD(tty)的访问将被序列化.显然,TIOCEXCL ioctl选项对我不起作用,因为它不会阻止root用户打开已经打开的tty设备.
我想这里有很多选择,但我会向所有人伸出援手,看看你是否还有其他想法或建议.
也许我错过了使用TIOCEXCL的一些东西......
也许还有其他方式通过open()或ioctl()或what-not获得独占访问权限.
如果有某种方法我可以检测到某个其他进程打开了设备,我可以等待并重试.我知道lsof,但我不愿意从这个程序中调用它只是为了学习这个.并且存在竞争条件.(也许我可以克服那个?:))
我可以实现锁定,就像显然用来获得对tty设备的独占访问.
更新1:
由于写入LCD设备的唯一程序是我的,我倾向于执行类似以下(伪代码)的操作来锁定代码:
f = open("/dev/ttyUSB0", O_RDWR)
flock(f, LOCK_EX)
// do any ioctl's, etc.
// do any write's
// sleep a tad to not flash messages too fast on LCD
nanosleep({0, 250000000}, NULL)
flock(f, LOCK_UN)
close(f)
Run Code Online (Sandbox Code Playgroud) 我想只用一次调用编译一个C++项目,WinExec以便用一些命令行参数启动另一个可执行文件.我不知道,指定在我的项目,以获得产生,无需微软并排侧的DLL,我不希望有安装我的目标系统上工作的可执行什么设置.任何提示?
症状是一个无法启动的应用程序,以下事件被写入应用程序日志(从法语自由翻译):
Error, SideBySide, event #33
Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" cannot be found.
Run Code Online (Sandbox Code Playgroud)
更新:我知道使用WinExec是不好的做法,但它就像一个魅力,微软不可能在任何未来的API版本中删除它,不是吗?
我构建了一个小脚本,用于解析给定文件类型的文件的目录,并将该位置(包括文件名)存储在数组中.看起来像这样:
def getFiles(directory)
arr = Dir[directory + '/**/*.plt']
arr.each do |k|
puts "#{k}"
end
end
Run Code Online (Sandbox Code Playgroud)
输出是路径和文件.但我只想要这条道路.
而不是/foo/bar.txt我只想要/ foo /
我的第一个想法是regexp,但我不知道该怎么做.
System.Diagnostics.Process proc0 = new System.Diagnostics.Process();
proc0.StartInfo.FileName = "cmd";
proc0.StartInfo.WorkingDirectory = Path.Combine(curpath, "snd");
proc0.StartInfo.Arguments = omgwut;
Run Code Online (Sandbox Code Playgroud)
现在有些背景......
string curpath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
Run Code Online (Sandbox Code Playgroud)
omgwut是这样的:
copy/b a.wav + b.wav + ... + y.wav + z.wav output.wav
一切都没有发生.显然有些不对劲.我也试过"复制"作为可执行文件,但这不起作用.
如果抛出异常,我想有办法向用户报告堆栈跟踪.做这个的最好方式是什么?是否需要大量的额外代码?
回答问题:
如果可能的话,我希望它是便携式的.我想要弹出信息,因此用户可以复制堆栈跟踪并在出现错误时通过电子邮件发送给我.
在.net中,与Java不同,默认情况下方法不是虚拟的.为了使用大多数模拟对象框架,您必须在"真实"对象上将您想要在模拟上使用的方法标记为虚拟,或者您必须有一个可以模拟被测试的类的接口接受代替实施.
将每个方法标记为虚拟似乎是不好的形式,但是为每个类定义一个接口似乎也是不好的形式.
什么是最好的事情?
我正在尝试优化C++例程.这个例程的主要瓶颈是对象向量的push_back().我尝试使用deque而不是尝试了一个列表.但奇怪的是(与理论相反)deque和list实现比vector对应运行得慢得多.
事实上,甚至clear()对于deque和list实现来说比向量对应运行慢得多.在这种情况下,Vector实现似乎是最快的,而列表实现是最慢的.
有什么指针吗?
注意:vector reserve()可以加快实现速度但不能完成,因为它的大小未知.
谢谢.
我想用这样的东西:
os.path.split("C:\\a\\b\\c")
Run Code Online (Sandbox Code Playgroud)
有了这种输出:
('C:\ a\b','c')
但是我希望它可以在其他分隔符上工作:
method ('a_b_c_d')
Run Code Online (Sandbox Code Playgroud)
有了这种输出:
('A B C D')
c++ ×3
.net ×2
string ×2
c ×1
c# ×1
cmd ×1
crt ×1
exception ×1
frameworks ×1
linux ×1
merge-module ×1
mocking ×1
open-source ×1
path ×1
php ×1
process ×1
python ×1
regex ×1
ruby ×1
side-by-side ×1
stack-trace ×1
stl ×1
tty ×1
unit-testing ×1
unix ×1
x86-64 ×1